Typescript 类型';字符串';不能用于索引类型';T';。ts(2536)
我在Typescript 类型';字符串';不能用于索引类型';T';。ts(2536),typescript,Typescript,我在result[key]中得到上述错误 type数据类型=记录 导出函数getDifference(data1:T,data2:T):T{ 常量键=对象键(数据1) 返回键。减少((结果,键)=>{ 结果[键]=数据1[键]-数据2[键] 返回结果 }, {}) } 如何在返回泛型类型T的同时消除它,以便使用函数仍然接收正确的类型(而不是简单地将T更改为DataType)。您需要为键以及结果[key]和{}设置正确的类型手动,因为typescript无法自动正确识别它们 type DataT
result[key]
中得到上述错误
type数据类型=记录
导出函数getDifference(data1:T,data2:T):T{
常量键=对象键(数据1)
返回键。减少((结果,键)=>{
结果[键]=数据1[键]-数据2[键]
返回结果
}, {})
}
如何在返回泛型类型
T
的同时消除它,以便使用函数仍然接收正确的类型(而不是简单地将T
更改为DataType
)。您需要为键以及结果[key]
和{}设置正确的类型
手动,因为typescript无法自动正确识别它们
type DataType = Record<string, number>
export function getDifference<T extends DataType>(data1: T, data2: T): T {
const keys: (keyof T)[] = Object.keys(data1)
return keys.reduce<T>((result, key) => {
if(typeof data1[key] === "number" && typeof data2[key]) { // Safeguard against object, array, etc. properties
result[key] = data1[key] - data2[key] as T[keyof T]
}
return result
}, {} as T)
}
``
type数据类型=记录
导出函数getDifference(data1:T,data2:T):T{
常量键:(keyof T)[]=Object.keys(data1)
返回键。减少((结果,键)=>{
if(typeof data1[key]==“number”&&typeof data2[key]){//保护对象、数组等属性
结果[key]=data1[key]-data2[key]作为T[keyof T]
}
返回结果
},{}as T)
}
``
根据@AlekseyL的记录,每个属性应为编号。指着我,我不需要安全检查。谢谢