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)
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 月),您实际上可以获得准确的类型!
| 归档时间: |
|
| 查看次数: |
5045 次 |
| 最近记录: |