TypeScript中infer推断可枚举联合类型时为何遍历三元运算符双分支?
TypeScript中infer推断枚举/无限类型时的分支差异问题
现象说明
在TypeScript的类型定义中使用infer推断类型时,存在以下差异行为:
- 当推断目标为可枚举类型(如
boolean这类多值联合类型)时,会遍历内部三元运算的真假两个分支,最终返回两个分支结果的联合类型; - 当推断目标为不可枚举类型(如
string、number这类无限集合类型)时,只会走内部三元运算的其中一个分支; - 无
infer的场景下,类型收窄逻辑符合常规预期。
示例代码
// union1 的类型为 0 | 1;alt1 的类型为 0 var union1: boolean extends infer Type ? Type extends true ? 1 : 0 : never; var alt1: boolean extends true ? 1 : 0; // union4 的类型为 0;alt4 的类型为 0 var union4: string extends infer Type ? Type extends "a" ? 1 : 0 : never; var alt4: string extends "a" ? 1 : 0;
疑问
- 上述行为的底层原因是什么?
- 该行为对应的规则在TypeScript官方文档的哪个位置有明确说明?
内容的提问来源于stack exchange,提问作者Andrew Philips
相关产品推荐
相关产品推荐

