keyof 操作符
使用 keyof 操作符可以获取一个对象类型的所有 key 或 数字字面量组合的联合类型。比如
type Person = {
name: string
age: number
heigh: number
weigh: number
}
type Keys = keyof Person // 'name' | 'age' | 'heigh' | 'weigh'
获取的 Keys 和 'name' | 'age' | 'heigh' | 'weigh'
等价。通常在代码中需要通过 key 遍历对象或者判断属性时,可以使用。
function print(obj: Person, key: Keys) {
console.log(obj[key])
}
对于对象类型 key 是 数字或者字符串的情况,keyof
会返回下面的情况:
type Arrayish = { [n: number]: unknown };
type A = keyof Arrayish; // type A = number
type Mapish = { [k: string]: boolean };
type M = keyof Mapish; // type M = string | number
为什么会有 keyof
?
在 js 中我们经常需要通过 obj[key]
的形式去动态访问对象的某个属性。这个时候如果没有对象上并不存在某个 key,并且没有对 key 做类型约束,很可能导致 bug 的产生。
比如:
console.log(person['gender'])
Person 类型并不存在 gender 属性。
在已经声明 Person 类型的情况下,直接使用 keyof 生成 Keys 对动态 key 进行类型约束会更加安全。
作者:剑大瑞
链接:juejin.cn/post/723667…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。