上篇文章中介绍使用extends
关键字可以约束传入数据类型必须包含某些属性,或者隶属于某一类。
但是,如果让你约束函数参数中传入对象的参数为指定的一些值,该怎么实现呢?这是什么意思呢,可以看如下的一个示例。
let x = { a: 1, b: 2, c: 3, d: 4 }
getProperty(x, 'a')
function getProperty(obj, key) {
return obj[key]
}
可以看到,getProperty
函数可以传入一个对象obj
和对象中的键key
,从而获取这个对象中的值。那么,如果要约束传入的第二个参数key
必须存在于obj
对象中该怎么实现呢?
这里用到了key of
关键字,再结合上篇文章中介绍的extends
关键字,可以将getProperty
改写一下
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key]
}
约束第二参数,使用泛型K
,对于任意类型K
必须是T
中的键,返回值是对象[键]
这种形式,也就是T[K]
。
key of
这中形式,就是所谓的索引类型,具体查看官方介绍说明。
如果觉得我的文章对您有用,请您随意打赏。您的支持将鼓励我更加努力创作!
如无特殊声明,文章均为原创,若有不正之处,万望告知。转载请附上原文地址,十分感谢!