MST

星途 面试题库

面试题:TypeScript 函数参数与返回值类型在泛型及逆变协变中的应用

设计一个 TypeScript 通用函数,该函数接受两个参数,第一个参数是一个数组,第二个参数是一个用于过滤数组元素的函数。通用函数返回过滤后的数组。要求在实现过程中,正确运用泛型来处理不同类型数组,同时考虑函数参数的逆变与返回值的协变情况,并通过类型检查确保函数的正确性和灵活性。
38.2万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
function filterArray<T>(arr: T[], filterFunction: (element: T) => boolean): T[] {
    return arr.filter(filterFunction);
}

解释:

  1. 泛型定义:这里使用了泛型 T 来表示数组中元素的类型,这样该函数就可以处理不同类型的数组。
  2. 参数逆变与返回值协变
    • 对于过滤函数 filterFunction,它接收一个类型为 T 的元素作为参数,因为 T 是泛型,在不同调用场景下可以是不同类型,满足参数的逆变特性(即传入的过滤函数参数类型可以是实际数组元素类型的超类型)。
    • 函数返回值类型为 T[],与传入数组 arr 的类型保持一致,满足返回值的协变特性(即返回值类型可以是实际数组元素类型的子类型)。
  3. 类型检查:TypeScript 的类型系统会根据泛型 T 的实际类型,对数组元素和过滤函数的参数进行类型检查,确保函数的正确性和灵活性。例如,如果传入 number[] 类型的数组,那么过滤函数的参数也必须是 number 类型,返回值也会是 number[] 类型。