我正在尝试在 typescript 中创建一个函数,其中第二个可选参数是第一个参数的键。没有可选参数,我想要的函数看起来像
function getVal<T>(obj: T, key: keyof T) {
return obj[key];
}
但是,我想key
是可选的,并采用默认值"id"
. 但是,函数
function getValBad<T>(obj: T, key: keyof T = "id") {
return obj[key];
}
不进行类型检查,因为打字稿不知道是否T
有id
. 解决此问题的部分方法是编写
function getValOk<T extends { id: any }>(obj: T, key: keyof T = "id") {
return obj[key];
}
然而,这股力量T
总是有一把钥匙的id
。
我的问题是,我可以编写一个函数getValGood
来进行类型检查getValGood({id: 1})
、类型检查getValGood({ID: 1}, "ID")
并且getValGood({ID: 1})
不进行类型检查。如果是这样,我如何getValGood
在打字稿中表示?