MST

星途 面试题库

面试题:TypeScript函数类型与类型别名及泛型的复杂应用

创建一个TypeScript类型别名,它表示一个函数类型,该函数接受一个泛型类型参数的数组,返回这个数组中元素的某种聚合结果(例如总和,如果元素是数字;或者连接后的字符串,如果元素是字符串)。要求在实现过程中充分利用泛型约束和类型保护,详细阐述你的设计思路。
17.0万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 定义类型别名:使用 type 关键字定义一个类型别名。
  2. 泛型参数:定义一个泛型 T,用于表示数组元素的类型。
  3. 泛型约束:通过 T extends number | string 约束 T 只能是 number 或者 string 类型。
  4. 类型保护:在函数内部,使用 typeof 进行类型保护,以确定是处理 number 还是 string 类型的数据,并执行相应的聚合操作。

代码实现

type Aggregator<T extends number | string> = (arr: T[]) => number | string;

const aggregator: Aggregator<number | string> = (arr) => {
    if (arr.length === 0) {
        return '' as unknown as number | string;
    }
    if (typeof arr[0] === 'number') {
        return arr.reduce((acc, num) => acc + num, 0);
    } else {
        return arr.join('');
    }
};

使用示例

const numberArr: number[] = [1, 2, 3];
const numberResult = aggregator(numberArr);
console.log(numberResult); 

const stringArr: string[] = ['a', 'b', 'c'];
const stringResult = aggregator(stringArr);
console.log(stringResult);