Reactjs 如何在TypeScript中键入Redux state以创建没有项的新状态
我正在使用TypeScript 2.x和Redux。我有一个reducer,它接收一个动作,根据这个动作,我希望创建一个新的状态,而不需要像这样的项目:Reactjs 如何在TypeScript中键入Redux state以创建没有项的新状态,reactjs,typescript,redux,Reactjs,Typescript,Redux,我正在使用TypeScript 2.x和Redux。我有一个reducer,它接收一个动作,根据这个动作,我希望创建一个新的状态,而不需要像这样的项目: export function reducer(state = {}, action) { switch (action.type) { case SOME_ACTION: let newState : { something: string } = state; delete newState.
export function reducer(state = {}, action) {
switch (action.type) {
case SOME_ACTION:
let newState : { something: string } = state;
delete newState.something;
return newState;
default:
return state;
}
}
感谢@basarat,我找到了删除东西的基本方法(请参阅)。上面的代码是基于这个建议的,但是现在我得到了
TS2322: Type '{}' is not assignable to type '{ something: string; }'.
Property 'something' is missing in type '{}'.
据我所知,这意味着我需要以某种方式推断传入状态的类型以删除此项
输入Redux状态的最佳方法是什么?或者有没有替代我的方法?不要使用redux进行状态突变。以下不是一个好主意
delete newState.something;
而是创建一个没有该道具的新对象,例如
const {something, ...newState} = state;
return newState;
除此之外,您还需要注释状态
。要快速破解,您只需任何:
export function reducer(state:any = {}, action) {
但是,如果您仍然感到困惑,您应该阅读《做一个更好的注释》:感谢@basarat的快速反馈。我明白我不应该改变状态,这就是为什么我试图创建一个新的状态。您提出的建议导致了与以前类似的错误TS2459:类型“{}”没有属性“something”,也没有字符串索引签名代码>这让我觉得我仍然需要以某种方式键入状态。是的,你需要对它进行注释