MST

星途 面试题库

面试题:TypeScript函数类型系统之条件类型与函数重载的深度结合

编写一组TypeScript函数重载,其中一个函数接受一个字符串参数,返回该字符串的长度;另一个函数接受一个数字数组参数,返回数组中所有数字的和。同时,通过条件类型实现一个类型工具,如果传入的类型是字符串,则返回字符串长度类型;如果传入的类型是数字数组,则返回数字和的类型。请完整实现函数重载以及条件类型工具,并解释其原理。
33.4万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
// 函数重载
function calculate(input: string): number;
function calculate(input: number[]): number;
function calculate(input: string | number[]): number {
    if (typeof input ==='string') {
        return input.length;
    } else {
        return input.reduce((acc, cur) => acc + cur, 0);
    }
}

// 条件类型工具
type CalculateType<T> = T extends string? number : T extends number[]? number : never;

// 原理解释:
// 1. **函数重载**:
//    - 前面两个 `function calculate` 声明是函数重载签名,它们定义了函数 `calculate` 可以接受的不同参数类型和返回值类型。
//    - 第三个 `function calculate` 是实际的函数实现,它根据传入参数的类型进行不同的逻辑处理。如果是字符串,返回字符串长度;如果是数字数组,返回数组元素之和。
// 2. **条件类型工具 `CalculateType`**:
//    - 它使用条件类型 `T extends U? X : Y`。如果类型 `T` 可以赋值给 `U`,则返回 `X`,否则返回 `Y`。
//    - 当 `T` 是 `string` 时,返回 `number` 类型(字符串长度类型);当 `T` 是 `number[]` 时,返回 `number` 类型(数字和的类型);对于其他类型,返回 `never` 类型,表示不支持的类型。