Skip to content
目录

类型系统设计

Redux 5 在 TypeScript 上补齐 Store、Dispatch、Middleware、Reducer 的泛型关系,使 thunk、slice 与 dispatch 类型可推断。核心仍运行时在 JS;类型在编译期约束用法。


1. Redux 5 相对 4.x

改进收益
UnknownAction / 更严 action减少 any dispatch
Middleware 泛型链dispatch 知悉 thunk 返回
Tuple 等工具类型configureStore 推断中间件组合
与 RTK 2 对齐应用层几乎只写 RTK

2. 核心类型(概念)

类型含义
State根 state 形状
Action / PayloadAction<P>最小 { type } 与带 payload
Reducer<S, A>纯函数签名
Store<S, A, StateExt>getState/dispatch/subscribe
Dispatch<A>可 dispatch 的 action 联合
Middleware三层柯里化签名

3. 推断从哪来

  • 手写:根 reducer combineReducers 推断 State
  • RTKconfigureStore({ reducer }) 一次推断 RootStateAppDispatch
  • 类型导出export type RootState = ReturnType<typeof store.getState> 模式仍常用。

4. Middleware 类型

目标:dispatch 除普通 action 外,还可 dispatch(thunk)

实现思路:中间件数组的 Middleware 泛型折叠Dispatch,由 RTK 的 configureStore 完成;手写 store 需自行声明 ThunkDispatch 交叉类型。


5. 实践建议

DoDon't
用 RTK createSlice 推断 action全库 dispatch<any>
导出 RootStateAppDispatch每个文件重复 infer
prepare 回调标注 payload可序列化 action 里塞 class 实例

6. 与 RTK 分工

负责
redux核心类型、Store API
@reduxjs/toolkitcreateSliceconfigureStore、Query 类型

读类型源码优先 RTK 的 index.d.ts,再回落 redux


7. 总结

Redux 5 类型系统服务 「dispatch 与 state 可推断」;工程上几乎总通过 RTK 享受,但理解底层有助于自定义 middleware 与库封装。

MIT License.