在泛型约束中使用类型参数
上篇文章中介绍使用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
这中形式,就是所谓的索引类型,具体查看官方介绍说明。
如果您觉得本文对您有用,欢迎捐赠或留言~
- 本博客所有文章除特别声明外,均可转载和分享,转载请注明出处!
- 本文地址:https://www.leevii.com/?p=1552