面试题答案
一键面试function filterArray<T>(arr: T[], callback: (element: T) => boolean): T[] {
let result: T[] = [];
for (let i = 0; i < arr.length; i++) {
if (callback(arr[i])) {
result.push(arr[i]);
}
}
return result;
}
泛型约束和类型推断协同工作解释
- 泛型约束:在函数定义
filterArray<T>(arr: T[], callback: (element: T) => boolean)
中,<T>
是泛型类型参数。这里通过callback: (element: T) => boolean
对泛型T
进行约束,确保传递给filterArray
函数的回调函数callback
的参数类型必须与数组arr
元素的类型一致。这保证了回调函数能正确处理数组中的元素,不会出现类型不匹配的错误。 - 类型推断:当调用
filterArray
函数时,TypeScript 编译器会根据传入的实际参数类型自动推断泛型T
的具体类型。例如:
const numbers = [1, 2, 3, 4, 5];
const filteredNumbers = filterArray(numbers, (num) => num > 3);
// 这里TypeScript能推断出T为number类型,因为传入的数组是number类型数组
不需要显式指定泛型类型 filterArray<number>(numbers, (num) => num > 3)
,使函数调用更简洁。编译器根据传入的数组类型推断出 T
为 number
,并确保回调函数的参数类型也是 number
,这就是泛型约束和类型推断协同工作的体现。