跳到主要内容

索引类型

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]
}
  • 效果: 传入的属性名与返回类型自动对应, 调用方不需要断言;