在TypeScript中,泛型(Generics)允许你在编写函数或类的时候不预先指定具体的类型,而是在使用的时候再指定类型。这为创建可重用的组件提供了极大的灵活性。高阶函数(Higher-order function)是指那些至少满足以下一个条件的函数:接受一个或多个函数作为参数,或者返回一个函数。
下面是一个结合了泛型和高阶函数的例子。这个例子定义了一个高阶函数processArray
,它接受一个处理函数作为参数,并应用这个处理函数到数组中的每个元素上,最后返回一个新的数组。这里使用了泛型来确保输入和输出数组的元素类型是相关的,但可以不同。
function processArray<T, R>(transformFn: (item: T) => R, array: T[]): R[] {
return array.map(transformFn);
}
// 使用示例
// 定义一个将字符串转换为大写的函数
const toUpperCase = (str: string): string => str.toUpperCase();
// 使用processArray处理一个字符串数组
const originalStrings = ['apple', 'banana', 'cherry'];
const upperCasedStrings = processArray(toUpperCase, originalStrings);
console.log(upperCasedStrings); // 输出: ['APPLE', 'BANANA', 'CHERRY']
// 另一个示例,将数字数组的每个元素乘以2
const multiplyByTwo = (num: number): number => num * 2;
const numbers = [1, 2, 3];
const doubledNumbers = processArray(multiplyByTwo, numbers);
console.log(doubledNumbers); // 输出: [2, 4, 6]
在这个例子中,processArray
是一个高阶函数,因为它接受一个函数transformFn
作为参数,并且它的定义使用了泛型T
表示输入数组的元素类型,R
表示输出数组的元素类型。这样,你可以用这个高阶函数处理不同类型的数组,并执行不同类型转换,而这一切都在编译时得到类型检查,保证了类型安全。