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']` 的类型。