面试题答案
一键面试MapType<Union>
的结果:MapType<Union>
的结果是{ a: number } & { b: string } & { c: string }
。
- 原因及分布式特性执行逻辑:
- 条件类型分布式特性在类型为联合类型时起作用。当
T
是联合类型(这里T
为Union
即'a' | 'b' | 'c'
),条件类型T extends 'a'? number : string
会被分布式应用。 - 具体来说,它会对联合类型中的每一个成员进行单独的条件判断。
- 对于
'a'
,满足'a' extends 'a'
,所以MapType<{ a: 'a' }>
得到{ a: number }
。 - 对于
'b'
,不满足'b' extends 'a'
,所以MapType<{ b: 'b' }>
得到{ b: string }
。 - 对于
'c'
,不满足'c' extends 'a'
,所以MapType<{ c: 'c' }>
得到{ c: string }
。
- 对于
- 最终,将这些单独判断的结果通过交叉类型
&
合并起来,就得到了{ a: number } & { b: string } & { c: string }
。这就是条件类型分布式特性在这个例子中的执行逻辑和产生结果的原因。
- 条件类型分布式特性在类型为联合类型时起作用。当