我正在努力了解如何正确键入减速器的初始状态。我有的是
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";高"中等;以及";"低";
打字游戏场