ste*_*wpf 6 typescript immer.js
考虑以下代码,其中第 2 行失败并显示Property 'newProperty' does not exist on type 'WritableDraft<MyObject>'. TS7053
// data is of type MyObject which until now has only a property myNumber
const payload = produce(data, (draft) => {
draft['newProperty'] = 'test'; // Property 'newProperty' does not exist on type 'WritableDraft<MyObject>'. TS7053
});
Run Code Online (Sandbox Code Playgroud)
如何动态地将新属性添加到草稿或将草稿的类型更改为已包含 的类型newProperty?我不想newProperty在MyObject类型本身中拥有。
您可以使用联合运算符将新属性添加到预先存在的类型:&。下面的代码应该可以解决您的问题。
(draft: WritableDraft<MyObject> & { newProperty : string }) => {
// put the rest of your code here
}
Run Code Online (Sandbox Code Playgroud)
看了 Linda Paiste 的回答后,我认为我上面采取的方法存在一些问题。我的答案确实向类型添加了一个属性,这可以消除您在访问或修改newProperty函数中的属性时遇到的任何错误。但是,如果将来类型或变量名称发生更改,它会更加冗长且难以维护。此外,它还强制函数的调用者传入包含该newProperty属性的对象,这可能不是您想要的。