这是我要正确键入的对象:
{
data : {
"unknownProperty1" : "foo",
"unknownProperty2" : 4,
...otherProperties
},
labelKey :"unknownProperty2",
valueKey : "unknownProperty1",
}
嵌套对象“数据”至少具有两个具有未知键的属性,但一个属性是数字类型,另一个属性是字符串类型
此外,属性labelKey必须是字符串类型的未知数据键;属性valueKey必须是数字类型的未知数据键;
我想出了以下解决方案:
type IData<T> = {
[key:string]: T
}
interface MyInterface<
T extends IData<number>,
K extends IData<string>
> {
data : (T & K)[],
labelKey : keyof T,
valueKey : keyof K,
}
但是它不能按预期工作,仅对于字符串类型的“ labelKey”,我不知道为什么
function myFunc<
T extends IData<number>,
K extends IData<string>
>(obj: MyInterface<T, K>){
const values = obj.map((d: T) => d[valueKey]) // correct d[valueKey] exists and is type number
const labels = obj.map((d: K) => d[labelKey]) // Fail, d[labelKey] is undefined
}