我是TypeScript的新手,正在尝试弄清楚如何处理此错误。我了解为什么会发生这种情况,但找不到正确的方法来处理此问题
type Data = {
name: string
age: number
}
type ValueOf<T> = T[keyof T]
const data: Data = {
name: 'Jack',
age: 33,
}
function change(name: keyof Data, value: ValueOf<Data>): ValueOf<Data> {
data[name] = value // error
return data[name]
}
错误:
键入“字符串|数字”不能分配给“字符串和数字”类型。
“字符串”类型不能分配给“字符串和数字”类型。
“字符串”类型不能分配给“数字”类型。
答案 0 :(得分:1)
您的代码不起作用的原因涉及对类型系统的一点理解。
虽然代码中的表达式data[name]
的类型为string | number
,但是分配给该表达式的任何值都必须可同时分配给 string
和 number
,或输入string & number
。显然这是不可能的。
为了解决此问题,change()
应该是一个泛型函数,它将允许您根据{{的特定值}来约束data[name]
和value
的类型。 1}}:
name