【发布时间】:2021-01-24 13:15:42
【问题描述】:
我想用函数updateDatas 更新对象状态。我将key、可能的subKey 和value 作为该函数的参数传递。
interface Datas {
code: number;
item1: Item;
}
interface Item {
id: number;
name: string;
}
const [datas, setDatas] = useState({
code: 42,
item1: {
id: 1,
name: 'foo'
}
});
function updateDatas(key: string, subKey: string, value: any) {
if (subKey) {
setDatas({...datas, key: {...datas.key, subKey: value}});
} else {
setDatas({...datas, key: value});
}
}
updateDatas('code', 23);
updateDatas('item1', 'name', 'bar');
但它不起作用,我有这个 Typescript 错误:
'{ key: any; 类型的参数代码:号码; item1:项目; }' 不可分配给“SetStateAction”类型的参数。 对象字面量只能指定已知属性,而 'key' 不存在于类型 'SetStateAction'.ts(2345)
【问题讨论】:
-
我认为您必须将 key 和 subKey 括在方括号中
setDatas({...datas, [key]: {...datas.key, [subKey]: value}});
标签: reactjs typescript setstate