typescript - 类型“字符串”不可分配给类型“字符串和数字”。ts(2322)
问题描述
我是打字稿的新手,并试图弄清楚如何处理这个错误。我明白为什么会这样,但找不到正确的方法来处理这个问题
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]
}
错误:
键入'字符串 | number' 不可分配给类型 'string & number'。
类型“字符串”不可分配给类型“字符串和数字”。
类型“字符串”不可分配给类型“数字”。
解决方案
您的代码不起作用的原因涉及对类型系统的一点了解。
虽然data[name]
代码中的表达式是 type ,但分配给此表达式的任何值都string | number
必须可分配给and或 type 。这显然是不可能的。 string
number
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
推荐阅读
- python - Hazelcast cluster_members 意外参数
- java - 如何在 C++ JNI 中定位 Kotlin 中的静态方法?
- python - 在没有重复的两个 numpy 数组之间找到最近对的最快方法
- php - 将数据从 react-native 发送到 laravel api 时出现特殊字符问题
- linux - 如何进行句子之间的比较并计算相似度?
- android - 如何防止设置活动立即保存所有更改?
- reactjs - 链接在 next.js 中无效,即使我在页面上
- javascript - Web API 获取请求正文未定义
- c# - 需要帮助将包含空格的 bbcode URL 转换为有效的降价
- telegraf - 如何在电报中检查插件状态?