keyof 语法
常用的场景:
-
获取对象的某一属性值时
比如:
当这么写时,会造成两个问题:
- 没有类型保护,所以ts会抛出这样的一个错误
- ts无法进行有效的类型推断。
peopleName
应该是一个string,但ts推断出来的却是any。
原因是因为,ts无法知道传进来的key
这个变量是否是people这个类型所具有的。
可以使用之前所学的泛型结合keyof解决这一问题。
代码:
getInfo<T extends keyof Person>(key:T):Person[T]{
return this.info[key]
}
思路:
- keyof 好比是js中遍历一个对象的属性
代码就转换成
T extends name
相当于
type T = name
这时候设置key为name
key:T
返回值就应该是Person[name]
:person[T]
这样以来ts就能推断出获取的属性类型了。