gpt4 book ai didi

typescript - 类型 'string' 不可分配给类型 'string & number' 。 ts(2322)

转载 作者:行者123 更新时间:2023-12-04 13:00:56 25 4
gpt4 key购买 nike

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

Type 'string | number' is not assignable to type 'string & number'.

Type 'string' is not assignable to type 'string & number'.

Type 'string' is not assignable to type 'number'.

最佳答案

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

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

为了解决这个问题,change()应该是一个通用函数,它允许你限制 data[name] 的类型和 value ,基于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

关于typescript - 类型 'string' 不可分配给类型 'string & number' 。 ts(2322),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57022357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com