我在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>
答案 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)
}
``