理解TypeScript类型运算符

55 阅读1分钟
  1. keyof 是一个单目运算符,接受一个对象类型作为参数,返回该对象的所有键名组成的联合类型
示例1:
type IObject = {
  name: string,
  id: number,
}
type keys = keyof IObject; // name | id

示例2:
interface IObject {
   name: string;
   id: number;
}
type keys = keyof IObject; // name | id

如果对象属性名采用索引形式,keyof 会返回属性名的索引类型。
示例1:
interface IPropertyType {
  [key: string]: number;
}
type keys = keyof IPropertyType; // string|number

对于联合类型,keyof 返回成员共有的键名
示例:
type A = {
 a: string,
 z: string,
}
type B = {
  b: string,
  z: string,
}
type keys = keyof (A | B); // z

对于交叉类型,keyof 返回所有键名
type keys = keyof (A & B); // 'a' | 'b' | 'z'
  1. in 运算符
用于取出(遍历)联合类型中所有值
type A = 'a' | 'b' | 'c';

type B = {
  [key in A]: number,
}
// 等价于
type B = {
  a: number,
  b: number,
  c: number,
}
  1. 方括号运算符( [] )
方括号运算符([])用于取出对象的键值类型,比如T[K]会返回对象T的属性K的类型。
type Person = {
  age: number;
  name: string;
  alive: boolean;
};

// Age 的类型是 number
type Age = Person['age'];