MST

星途 面试题库

面试题:TypeScript泛型在复合类型构建中的深度应用

假设有一个通用的函数,它接受一个数组并返回该数组中所有元素的类型组成的联合类型。请使用TypeScript泛型来实现这个函数,并说明在实现过程中如何确保类型安全,以及泛型类型参数在构建复合类型过程中的作用和优势。
22.4万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
  1. 实现代码
function getTypes<T>(arr: T[]): T extends Array<infer U> ? U : never {
    return arr[0] as T extends Array<infer U> ? U : never;
}
  1. 确保类型安全
    • 通过泛型 T 来表示数组的类型,T 会根据传入数组的实际类型进行推断。
    • T extends Array<infer U> 这种条件类型推断,确保只有当 T 是数组类型时,才会提取数组元素类型 U。如果 T 不是数组类型,则返回 never,从而避免在非数组情况下产生错误。
  2. 泛型类型参数在构建复合类型过程中的作用和优势
    • 作用:泛型类型参数 T 作为一个占位符,在函数调用时根据传入的实际参数类型来确定具体类型。这里通过 infer U 在条件类型中提取数组元素类型 U,从而构建出返回的联合类型。
    • 优势
      • 代码复用:同一个函数可以处理不同类型数组,而不需要为每种数组类型单独编写函数。
      • 类型安全:在编译阶段就能检查出类型错误,因为泛型会根据传入的实际类型进行精确的类型推断,确保返回类型和数组元素类型的一致性。