在TypeScript
类型操作中typeof
和in
经常放在一起使用,使用频率也很高,因此将这两个关键字放在一起介绍。
keyof
使用
keyof
操作符接受一个对象类型作为参数,返回该对象属性名组成的字面量联合类型
type Dog = {
name: string; age: number; };
type D = keyof Dog; //type D = "name" | "age"
在一些高级类型中经常会用到keyof any
, 这又是什么鬼?鼠标放上去看看就知道了
可以看到keyof any
返回的是一个联合类型:string | number | symbol
,结合前文说到keyof
是为了取得对象的key
值组成的联合类型,那么key
值有可能是什么类型呢?自然就是string | number | symbol
。
该关键字一般会和extends
关键字结合使用,对对象属性的类型做限定,比如K extends keyof any
就代表K的类型一定是keyof any
所返回的联合类型的子类,如果输入不符合限定,那么自然也就不能作为对象的属性,类型系统就会报错。
因此,keyof any
表示了对象key
值可能的取值类型。这一点在本文之后的一些类型实现中也会用到。
注意点
遇到索引签名时,typeof
会直接返回其类型