“字符串”类型不能分配给“字符串和数字”类型。 ts(2322)

时间:2019-07-13 19:51:27

标签: typescript

我是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]
}

错误

  

键入“字符串|数字”不能分配给“字符串和数字”类型。

     

“字符串”类型不能分配给“字符串和数字”类型。

     

“字符串”类型不能分配给“数字”类型。

1 个答案:

答案 0 :(得分:1)

您的代码不起作用的原因涉及对类型系统的一点理解。

虽然代码中的表达式data[name]的类型为string | number,但是分配给该表达式的任何值都必须可同时分配给 string number,或输入string & number。显然这是不可能的。

为了解决此问题,change()应该是一个泛型函数,它将允许您根据{{的特定值}来约束data[name]value的类型。 1}}:

name