MST

星途 面试题库

面试题:TypeScript条件类型分布式特性的复杂场景应用

假设你有一个联合类型`type Union = 'a' | 'b' | 'c'`,以及一个映射类型`type MapType<T> = { [P in T]: T extends 'a'? number : string; }`。请分析并解释在使用条件类型分布式特性时,`MapType<Union>`的结果是什么,以及为什么会得到这样的结果,详细说明分布式特性的执行逻辑。
44.8万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
  1. MapType<Union>的结果
    • MapType<Union>的结果是{ a: number } & { b: string } & { c: string }
  2. 原因及分布式特性执行逻辑
    • 条件类型分布式特性在类型为联合类型时起作用。当T是联合类型(这里TUnion'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 }。这就是条件类型分布式特性在这个例子中的执行逻辑和产生结果的原因。