设计思路
- 定义类型别名:使用
type
关键字定义一个类型别名。
- 泛型参数:定义一个泛型
T
,用于表示数组元素的类型。
- 泛型约束:通过
T extends number | string
约束 T
只能是 number
或者 string
类型。
- 类型保护:在函数内部,使用
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);