类型'string'不能用于索引类型'T'.ts(2536)

时间:2020-06-04 03:29:49

标签: typescript

我在result[key]中遇到上述错误

type DataType = Record<string, number>
export function getDifference<T extends DataType>(data1: T, data2: T): T {
  const keys = Object.keys(data1)
  return keys.reduce<T>((result, key) => {
    result[key] = data1[key] - data2[key]
    return result
  }, {})
}

如何在仍返回通用类型T的同时摆脱它,以便使用函数仍能接收正确的类型(而不是简单地将T更改为DataType)。 / p>

1 个答案:

答案 0 :(得分:2)

您需要为keys以及result[key]{}手动设置正确的类型,因为打字稿无法自动正确识别它们。

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)
}
``