reducers.ts - 图1

type Reducer(该文件中最重要的)

  1. export type Reducer<S = any, A extends Action = AnyAction> = (
  2. state: S | undefined,
  3. action: A
  4. ) => S

reducer(也称为reducer函数)是一个接受累加和一个值并返回新累加的函数。它们用于将值的集合缩减为单个值.

注意⚠️:Reducers并不是Redux独有的,它们是函数式编程中的基本概念,比如JS,他内置的reducing API是Array.prototype.reduce()

在Redux, 累积值是state object(状态对象), 而累加的值就是actions(动作)。Reducers 根据之前的state(状态)和 an action(一个动作)来计算出新状态,他们必须是纯函数(对于给定的输入返回完全相同的输出的函数),他们也应该没有副作用.
注意:⚠️⚠️⚠️**Reducers是Redux中最重要的概念

ReducersMapObject

值为对应不同reducer函数的对象

  1. export type ReducersMapObject<S = any, A extends Action = AnyAction> = {
  2. [K in keyof S]: Reducer<S[K], A>
  3. }

StateFromReducersMapObject

ReducersMapObject推断一个组合的state形状

  1. export type StateFromReducersMapObject<M> = M extends ReducersMapObject

ReducerFromReducersMapObject

ReducersMapObject推断reducer的联合类型

  1. export type ReducerFromReducersMapObject<M> = M extends {
  2. [P in keyof M]: infer R
  3. }
  4. ? R extends Reducer<any, any>
  5. ? R
  6. : never
  7. : never

ActionFromReducer

从reducer函数推断action类型

  1. export type ActionFromReducer<R> = R extends Reducer<any, infer A> ? A : never

ActionFromReducersMapObject

ReducersMapObject推断action(动作)联合类型

  1. export type ActionFromReducersMapObject<M> = M extends ReducersMapObject
  2. ? ActionFromReducer<ReducerFromReducersMapObject<M>>
  3. : never