keyof
对一个对象使用keyof操作符,会返回该对象属性名组成的一个字符串或者数字字面量的联合
如果这个类型有一个string或者number的类型的索引签名,keyof直接返回这些类型
1 | type Arrayish={[n:number]:unknown}; |
M是stirng|number,这是因为JavaScript对象的属性名会被强制转换为一个字符串,所以obj[0]和obj[“0”]是一样的
数字字面量联合类型
1 | const NumericObject ={ |
注意:
下面例子会报错
1 | function useKey<T,K extends keyof T>(o:T,k:K){ |
如果确定只使用字符串类型的属性名,
1 | function useKey<T,K extends Extract<keyof T,string>>(o:T,k:K){ |
如果要处理所有属性名:
1 | function useKey<T,K extends keyof T>(o:T,k:K){ |