Reactjs 如何在TypeScript中键入Redux state以创建没有项的新状态

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.

我正在使用TypeScript 2.x和Redux。我有一个reducer,它接收一个动作,根据这个动作,我希望创建一个新的状态,而不需要像这样的项目:

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”,也没有字符串索引签名这让我觉得我仍然需要以某种方式键入状态。是的,你需要对它进行注释