Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 理解Redux中的StateFromReducerMapObject类型_Typescript_Redux_Typescript Generics - Fatal编程技术网

Typescript 理解Redux中的StateFromReducerMapObject类型

Typescript 理解Redux中的StateFromReducerMapObject类型,typescript,redux,typescript-generics,Typescript,Redux,Typescript Generics,我正在尝试阅读Redux源代码,但在src/types/reducers.ts中,我被下面的类型定义卡住了 /** *从“ReducerMapObject”推断组合状态形状。 * *@template M为'combineReducers(map:M)'提供的还原器对象映射。 */ 导出类型statefromReducerMapObject=M扩展了ReducerMapObject< 任何 任何 > ? {[P in keyof M]:M[P]扩展了减速器?S:never} :从不 我被困在:

我正在尝试阅读Redux源代码,但在
src/types/reducers.ts中,我被下面的类型定义卡住了

/**
*从“ReducerMapObject”推断组合状态形状。
*
*@template M为'combineReducers(map:M)'提供的还原器对象映射。
*/
导出类型statefromReducerMapObject=M扩展了ReducerMapObject<
任何
任何
>
? {[P in keyof M]:M[P]扩展了减速器?S:never}
:从不
我被困在:

M扩展了ReducerMapObject<
任何
任何
>
? {[P in keyof M]:M[P]扩展了减速器?S:never}
:从不
这行中有一个
。这看起来像一个三元运算

有人能给我解释一下这里发生了什么事吗


。提前感谢。

是一种条件类型

例如:

T扩展U?X:Y
在这个简化示例中,如果
T扩展U
(aka
T
可分配给
U
),则T的类型为
X
。否则,
T
的类型为
Y

因此,在您的情况下:

M扩展了ReducerMapObject<
任何
任何
>
? {[P in keyof M]:M[P]扩展了减速器?S:never}
:从不
如果
M扩展ReducersMapObject
(又称
M
可分配给
ReducersMapObject
),则
M
{[p在M的键中]:M[p]扩展Reducer?S:never}
,否则
M
never

在本例中,它是一个嵌套的条件类型,所以使用
M[p]扩展Reducer?S:never
也会被计算。因此,如果
M[P]
可分配给
Reducer
,那么
M[P]
就是
S
,否则它是
永不