我正在尝试了解如何正确键入减速器的初始状态。我拥有的是。
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”时无法自动完成。
那么正确的做法是什么?提前致谢。
答案 0 :(得分:0)
你需要的是让类型与 TodosState 中的一个键匹配的优先级
type ITodo = {
....
priority: keyof TodosState
}
有了这个,优先级现在只能取“高”、“中”和“低”三个值之一