Skip to content

Latest commit

 

History

History
32 lines (23 loc) · 1.21 KB

File metadata and controls

32 lines (23 loc) · 1.21 KB

keyof

本节完全是复制的,参考: 重难点梳理

keyof 是索引类型操作符。用于获取一个“常量”的类型,这里的“常量”是指任何可以在 编译期确定的东西,例如 const、function、class 等。

假设 T 是一个类型,那么 keyof T 产生的类型就是 T 的属性名称字符串字面量类型构成的联合类型, 说的这么绕就是,T 对象或者函数所有共有属性名称 key 的集合

type Person = {
  name: string;
  age: number;
  isABoy: boolean;
  marry(): any;
};

type keyofPerson = keyof Person; //结果是: "name" | "age" | "isABoy" | "marry";

注意,如果 T 是带有字符串索引的类型,那么keyof Tstring或者number类型。 索引签名参数类型必须为 "string" 或 "number"

interface Map<T> {
  [key: string]: T;
}

//T[U]是索引访问操作符;U是一个属性名称。
let keys: keyof Map<number>; //string | number
let value: Map<number>["antzone"]; //number

其实是因为 number 类型 JS 最终会通过 string 类型做转换,参考 接口-可索引的类型 部分