我有一个对象:
const sampleExpenseData = {
Time: "11-12-19",
Meals: 5130,
Pantry: 10,
Living: 10,
Others: 0,
Total: 74
}
我想定义一个函数,以便它可以更新特定键的值,到目前为止,我是这样的:
const updateValueInDict = (
obj: typeof sampleExpenseData,
key: keyof typeof sampleExpenseData,
upDatedValue: string | number
): void => {
obj[key] = upDatedValue // this line throws error
}
错误提示:
键入“字符串|数字”不能分配为“从不”类型。
类型'string'不能分配给类型'never'.ts(2322)
TIA !!!
答案 0 :(得分:1)
这里的问题是,如果您要为任意键分配一个值,则该值必须具有可分配给您可能要为其分配给每个键的类型。这意味着该值的类型必须为string & number
,才能同时分配给string
和number
属性类型。交集string & number
是never
。
解决方案是使用通用类型,以便根据upDatedValue
的类型来约束key
具有正确的类型:
const updateValueInDict = <K extends keyof typeof sampleExpenseData>(
obj: typeof sampleExpenseData,
key: K,
upDatedValue: (typeof sampleExpenseData)[K]
): void => {
obj[key] = upDatedValue
}
这还意味着在调用函数时可以更严格地检查参数的类型。