MST

星途 面试题库

面试题:TypeScript函数类型系统之泛型函数的高级应用

设计一个泛型函数,它可以接受一个对象数组和一个属性名,返回这个对象数组中每个对象对应属性值组成的新数组。并且要求这个函数能够在编译时检查属性名是否存在于对象类型中。请详细说明泛型类型参数是如何定义和约束的,以及函数的具体实现代码。
13.8万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
  1. 泛型类型参数定义与约束
    • 定义两个泛型类型参数。
      • 第一个泛型类型参数 T 表示对象数组中对象的类型。这里 T 被约束为 object,确保传入的是对象类型。
      • 第二个泛型类型参数 K 表示属性名的类型。K 被约束为 keyof T,这意味着 K 必须是 T 类型对象的属性名。这样就能在编译时检查属性名是否存在于对象类型中。
  2. 函数具体实现代码(以TypeScript为例)
function getPropertyValues<T extends object, K extends keyof T>(arr: T[], prop: K): T[K][] {
    return arr.map((obj) => obj[prop]);
}

上述代码中,getPropertyValues 函数接受一个 T 类型的对象数组 arr 和一个 K 类型的属性名 prop。通过 map 方法遍历数组,提取每个对象中指定属性 prop 的值,并组成新的数组返回。新数组的类型为 T[K][],即每个元素的类型是 T 类型对象中 K 属性的类型。