【发布时间】:2021-03-18 02:20:13
【问题描述】:
我正在尝试在 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];
}
不进行类型检查,因为 typescript 不知道 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?
【问题讨论】:
标签: typescript default-arguments keyof