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

时间:2017-07-21 06:17:10

标签: reactjs typescript redux

我正在使用TypeScript 2.x和Redux。我有一个减速器接收一个动作,基于此我希望创建一个没有这样的项目的新状态:

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我找到了删除内容的基础知识(请参阅TypeScript 2: Remove item from 2-field object)。上面的代码基于该建议,但现在我改为

    TS2322: Type '{}' is not assignable to type '{ something: string; }'.
  Property 'something' is missing in type '{}'. 

据我所知,这意味着我需要以某种方式推断传入状态的类型以删除此项。

键入Redux状态的最佳方法是什么?或者有替代方法吗?

1 个答案:

答案 0 :(得分:0)

不要使用redux改变状态。例如。以下不是一个好主意

delete newState.something;

而是创建一个没有该支柱的新对象,例如

const {something, ...newState} = state;
return newState;

除此之外,您需要注释state。对于快速黑客攻击,您只需any

export function reducer(state:any = {}, action) {

但如果你仍然感到困惑,你应该阅读更好的注释:https://basarat.gitbooks.io/typescript/docs/types/type-system.html