理解 Redux 中的 StateFromReducersMapObject 类型
Understanding StateFromReducersMapObject type in Redux
我正在尝试阅读 Redux 源代码,但我卡在 src/types/reducers.ts
中的以下类型定义中
/**
* Infer a combined state shape from a `ReducersMapObject`.
*
* @template M Object map of reducers as provided to `combineReducers(map: M)`.
*/
export type StateFromReducersMapObject<M> = M extends ReducersMapObject<
any,
any
>
? { [P in keyof M]: M[P] extends Reducer<infer S, any> ? S : never }
: never
我被困在:
M extends ReducersMapObject<
any,
any
>
? { [P in keyof M]: M[P] extends Reducer<infer S, any> ? S : never }
: never
这一行有一个?
。这看起来像一个三元运算。
谁能给我解释一下这是怎么回事?
Here is the full source code。提前谢谢你。
?
是条件类型introduced in TypeScript 2.8。
例如:
T extends U ? X : Y
在这个简化的示例中,如果 T extends U
(又名 T
可分配给 U
),则 T 的类型为 X
。否则,如果不是,则 T
是 Y
.
类型
那么在你的情况下:
M extends ReducersMapObject<
any,
any
>
? { [P in keyof M]: M[P] extends Reducer<infer S, any> ? S : never }
: never
如果M extends ReducersMapObject<any, any>
(又名M
可分配给ReducersMapObject<any, any>
)则M
是{ [P in keyof M]: M[P] extends Reducer<infer S, any> ? S : never }
,否则M
是never
.
在本例中,它是一个嵌套的条件类型,因此 with M[P] extends Reducer<infer S, any> ? S : never
也被评估。因此,如果 M[P]
可分配给 Reducer<infer S, any>
,则 M[P]
为 S
,否则为 never
.
我正在尝试阅读 Redux 源代码,但我卡在 src/types/reducers.ts
/**
* Infer a combined state shape from a `ReducersMapObject`.
*
* @template M Object map of reducers as provided to `combineReducers(map: M)`.
*/
export type StateFromReducersMapObject<M> = M extends ReducersMapObject<
any,
any
>
? { [P in keyof M]: M[P] extends Reducer<infer S, any> ? S : never }
: never
我被困在:
M extends ReducersMapObject<
any,
any
>
? { [P in keyof M]: M[P] extends Reducer<infer S, any> ? S : never }
: never
这一行有一个?
。这看起来像一个三元运算。
谁能给我解释一下这是怎么回事?
Here is the full source code。提前谢谢你。
?
是条件类型introduced in TypeScript 2.8。
例如:
T extends U ? X : Y
在这个简化的示例中,如果 T extends U
(又名 T
可分配给 U
),则 T 的类型为 X
。否则,如果不是,则 T
是 Y
.
那么在你的情况下:
M extends ReducersMapObject<
any,
any
>
? { [P in keyof M]: M[P] extends Reducer<infer S, any> ? S : never }
: never
如果M extends ReducersMapObject<any, any>
(又名M
可分配给ReducersMapObject<any, any>
)则M
是{ [P in keyof M]: M[P] extends Reducer<infer S, any> ? S : never }
,否则M
是never
.
在本例中,它是一个嵌套的条件类型,因此 with M[P] extends Reducer<infer S, any> ? S : never
也被评估。因此,如果 M[P]
可分配给 Reducer<infer S, any>
,则 M[P]
为 S
,否则为 never
.