type Reducer(该文件中最重要的)
export type Reducer<S = any, A extends Action = AnyAction> = (
state: S | undefined,
action: A
) => S
reducer(也称为reducer函数)是一个接受累加和一个值并返回新累加的函数。它们用于将值的集合缩减为单个值.
注意⚠️:Reducers并不是Redux独有的,它们是函数式编程中的基本概念,比如JS,他内置的reducing API是Array.prototype.reduce()
在Redux, 累积值是state object(状态对象), 而累加的值就是actions(动作)。Reducers 根据之前的state(状态)和 an action(一个动作)来计算出新状态,他们必须是纯函数(对于给定的输入返回完全相同的输出的函数),他们也应该没有副作用.
注意:⚠️⚠️⚠️**Reducers是Redux中最重要的概念
ReducersMapObject
值为对应不同reducer函数的对象
export type ReducersMapObject<S = any, A extends Action = AnyAction> = {
[K in keyof S]: Reducer<S[K], A>
}
StateFromReducersMapObject
从ReducersMapObject
推断一个组合的state形状
export type StateFromReducersMapObject<M> = M extends ReducersMapObject
ReducerFromReducersMapObject
从ReducersMapObject
推断reducer的联合类型
export type ReducerFromReducersMapObject<M> = M extends {
[P in keyof M]: infer R
}
? R extends Reducer<any, any>
? R
: never
: never
ActionFromReducer
从reducer函数推断action类型
export type ActionFromReducer<R> = R extends Reducer<any, infer A> ? A : never
ActionFromReducersMapObject
从ReducersMapObject
推断action(动作)联合类型
export type ActionFromReducersMapObject<M> = M extends ReducersMapObject
? ActionFromReducer<ReducerFromReducersMapObject<M>>
: never