Typescript 类型';字符串';不可分配给类型';弦乐;编号';。ts(2322)
我是typescript新手,正在尝试找出如何处理此错误。我明白为什么会这样,但我找不到正确的方法来处理Typescript 类型';字符串';不可分配给类型';弦乐;编号';。ts(2322),typescript,Typescript,我是typescript新手,正在尝试找出如何处理此错误。我明白为什么会这样,但我找不到正确的方法来处理 类型数据={ 名称:string 年龄:数目 } 类型ValueOf=T[keyof T] 常量数据:数据={ 名字:“杰克”, 年龄:33岁, } 函数更改(名称:keyof数据,值:ValueOf):ValueOf{ 数据[名称]=值//错误 返回数据[名称] } 错误: 类型“string | number”不可分配给类型“string&number” 类型“string”不可分配给
类型数据={
名称:string
年龄:数目
}
类型ValueOf=T[keyof T]
常量数据:数据={
名字:“杰克”,
年龄:33岁,
}
函数更改(名称:keyof数据,值:ValueOf):ValueOf{
数据[名称]=值//错误
返回数据[名称]
}
错误:
类型“string | number”不可分配给类型“string&number”
类型“string”不可分配给类型“string&number”
类型“string”不可分配给类型“number”
代码不起作用的原因涉及到对类型系统的一点理解 虽然代码中的表达式
data[name]
的类型为string | number
,但分配给此表达式的任何值都必须同时分配给string
和number
,或者类型为string&number
。这显然是不可能的
为了解决此问题,change()
应该是一个通用函数,它允许您根据name
的特定值约束数据[name]
和值的类型:
type Data = {
name: string
age: number
}
const data: Data = {
name: 'Jack',
age: 33,
}
function change<K extends keyof Data>(name: K, value: Data[K]): Data[K] {
return data[name] = value
}
change('name', 'Jill') // infers change<'name'>, value: string
change('age', 21) // infers change<'age'>, value: number
类型数据={
名称:string
年龄:数目
}
常量数据:数据={
名字:“杰克”,
年龄:33岁,
}
函数更改(名称:K,值:数据[K]):数据[K]{
返回数据[名称]=值
}
change('name','Jill')//推断更改,值:string
change('age',21)//推断变化,值:number
太棒了!非常感谢你!