Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 类型';字符串';不能用于索引类型';T';。ts(2536)_Typescript - Fatal编程技术网

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的
记录,每个属性应为
编号。指着我,我不需要安全检查。谢谢