从 Redux Toolkit 的 createSlice 获取操作类型

Joh*_*ith 6 typescript redux-toolkit

我正在createSlice与 一起使用useReducer

我希望能正确输入调度,即React.Dispatch<ReducerActions>

如何从中提取操作类型createSlice

以下内容不起作用,它解决了AnyAction...我想说这是可以理解的,因为所有操作都会通过所有减速器。

Dispatch<Parameters<typeof slice["reducer"]>[1]>
Run Code Online (Sandbox Code Playgroud)

Lin*_*ste 7

createSlice将操作创建者存储为属性中的键控对象actions。我们正在寻找的是所有动作创建者的返回类型的并集。我们将使用映射类型来获取它。

type SliceActions<T> = {
    [K in keyof T]: T[K] extends (...args: any[]) => infer A ? A : never;
}[keyof T]

type ActionTypes = SliceActions<typeof slice.actions>
Run Code Online (Sandbox Code Playgroud)

我使用了此Playground Link中文档中的计数器示例,并将计算值ActionTypes评估为:

type ActionTypes = {
    payload: undefined;
    type: "counter/increment";
} | {
    payload: undefined;
    type: "counter/decrement";
} | {
    payload: number;
    type: "counter/incrementByAmount";
}
Run Code Online (Sandbox Code Playgroud)

当我第一次写这个答案时(2020 年 10 月),操作类型被推断为type: string而不是特定的字符串文字。使用最新版本的 Redux Toolkit 和 TypeScript(截至 2023 年 3 月),您实际上可以获得准确的类型!