MST

星途 面试题库

面试题:TypeScript泛型类型约束与条件类型

编写一个TypeScript函数,该函数接收一个数组和一个回调函数,回调函数需满足只能处理数组元素类型及其子类型。利用泛型和条件类型实现这个功能,并解释实现过程中泛型类型约束和条件类型是如何协同工作的。
25.9万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
function processArray<T, U extends T>(arr: T[], callback: (item: U) => void): void {
    for (const item of arr) {
        callback(item as U);
    }
}
  1. 泛型类型约束
    • T 是数组元素的类型。
    • U extends T 表示 UT 及其子类型。这确保了回调函数 callback 只能处理 T 及其子类型的元素。例如,如果 TnumberU 可以是 number 或者 number 的子类型(在JavaScript/TypeScript中,没有特别细分的数字子类型,但在其他场景可能有意义,比如 1number 的“子类型” 这样的概念)。
  2. 条件类型:这里虽然没有典型的三元条件类型(A extends B? C : D),但是 U extends T 这种泛型类型约束其实隐含了条件判断的意味。它保证了 UT 的类型关系,只有满足这种关系,函数才能正确处理数组元素和回调函数的参数类型匹配,从而确保类型安全。

例如使用方式:

const numbers = [1, 2, 3];
processArray(numbers, (num) => {
    console.log(num * 2);
});