MST

星途 面试题库

面试题:TypeScript泛型约束与类型推断综合应用

假设我们有一个函数`getProperty`,它接受一个对象和一个属性名,返回该对象对应属性的值。要求使用泛型和类型推断,确保传入的属性名确实存在于对象中。请实现这个函数,并说明泛型类型参数和类型推断是如何工作的。
20.2万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
function getProperty<T, K extends keyof T>(obj: T, prop: K): T[K] {
    return obj[prop];
}

// 泛型类型参数和类型推断的工作原理:
1. **泛型类型参数**:
   - `T` 是代表传入对象的类型。它是一个类型变量,允许我们在不指定具体类型的情况下,以一种通用的方式处理不同类型的对象。
   - `K` 是代表属性名的类型。这里通过 `K extends keyof T` 进行约束,`keyof T` 表示 `T` 类型对象所有属性名的联合类型,所以 `K` 只能是 `T` 对象实际存在的属性名类型。
2. **类型推断**:
   - 当我们调用 `getProperty` 函数时,TypeScript 会根据传入的实际参数推断 `T` 和 `K` 的具体类型。例如,如果我们调用 `getProperty({name: 'John', age: 30}, 'name')`,TypeScript 会推断 `T` 为 `{name: string; age: number}`,`K` 为 `'name'`,这样就确保了传入的属性名 `'name'` 确实存在于对象 `{name: 'John', age: 30}` 中,并且返回值类型为 `string`,也就是 `T['name']` 的类型。