类型减速器初始状态

时间:2021-06-02 18:00:32

标签: reactjs typescript redux react-redux

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

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”时无法自动完成。

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

1 个答案:

答案 0 :(得分:0)

你需要的是让类型与 TodosState 中的一个键匹配的优先级

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

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

Typescript Playground

相关问题