类型减速器初始状态



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

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;
};

通过这种方式,我无法访问状态[优先级],因为我得到了这个错误:

在类型"TodosState"上找不到参数类型为"string"的索引签名。

我试过了。

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

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

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

这也有效,但当我尝试访问例如"state.high"时,无法自动完成。

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

您需要的是使类型与TodosState 中的一个密钥匹配的优先级

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

有了这个位置,优先级现在只能取三个值中的一个"0";高"中等;以及";"低";

打字游戏场

最新更新