MST

星途 面试题库

面试题:TypeScript泛型约束与类型推断

编写一个TypeScript函数,接受一个数组和一个回调函数作为参数。回调函数接受数组元素类型作为参数,并返回一个布尔值。使用泛型约束确保数组元素类型与回调函数参数类型匹配,并且要利用类型推断让函数调用更简洁。请解释这里泛型约束和类型推断是如何协同工作的。
46.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
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;
}

泛型约束和类型推断协同工作解释

  1. 泛型约束:在函数定义 filterArray<T>(arr: T[], callback: (element: T) => boolean) 中,<T> 是泛型类型参数。这里通过 callback: (element: T) => boolean 对泛型 T 进行约束,确保传递给 filterArray 函数的回调函数 callback 的参数类型必须与数组 arr 元素的类型一致。这保证了回调函数能正确处理数组中的元素,不会出现类型不匹配的错误。
  2. 类型推断:当调用 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),使函数调用更简洁。编译器根据传入的数组类型推断出 Tnumber,并确保回调函数的参数类型也是 number,这就是泛型约束和类型推断协同工作的体现。