索引类型
keyof 得到什么?
- 含义:
keyof T是T上所有公共属性名组成的联合类型;
interface Car {
manufacturer: string;
model: string;
year: number;
}
let carProps: keyof Car; // "manufacturer" | "model" | "year"
- 用途: 把"属性名"本身变成可约束的类型, 避免手写字符串联合;
索引访问操作符如何取值类型?
- 语法:
T[K], 表示T中属性K对应的类型; - 约束:
K必须是keyof T的子集, 否则编译报错;
function getProperty<T, K extends keyof T>(o: T, propertyName: K): T[K] {
return o[propertyName]; // 返回值类型恰好是 T[K]
}
- 效果: 传入的属性名与返回类型自动对应, 调用方不需要断言;