【问题标题】:Type reducer initial state类型 reducer 初始状态
【发布时间】:2021-06-02 18:00:32
【问题描述】:

我正在尝试了解如何正确键入减速器的初始状态。我有的是。

interface TodosState {
  high: ITodo[];
  medium: ITodo[];
  low: ITodo[];
}

const INITIAL_STATE: TodosState = {
  high: [],
  medium: [],
  low: [],
};

const addTodo = (state: TodosState, payload: ITodo) => {
  const { description, id, priority } = payload;
  const updatedState = { ...state };
  state[priority].push();
  return updatedState;
};

这样我就不能访问 state[priority] 因为我得到这个错误:

在“TodosState”类型上找不到带有“string”类型参数的索引签名。

我试过了。

interface TodosState extends Record<string, any> {
  high: ITodo[];
  medium: ITodo[];
  low: ITodo[];
}

有了这个我可以推送新的值,但是我不能自动完成数组方法,所以我认为这是不对的。

interface TodosState  {
  [key: string]: ITodo[]
}

这也可以,但我在尝试访问“state.high”时无法自动完成。

那么正确的方法是什么?提前致谢。

【问题讨论】:

    标签: reactjs typescript redux react-redux


    【解决方案1】:

    您需要的是类型与 TodosState 中的键之一匹配的优先级

    type ITodo = {
    ....
    priority: keyof TodosState
    }
    

    有了这个,优先级现在只能取“高”、“中”和“低”三个值之一

    Typescript Playground

    【讨论】:

      猜你喜欢
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 2019-05-28
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多