记几个typescript中遇到的特殊例子
猜猜下面四个例子中的result结果是啥:
type Test<T> = T extends number ? 1 : 2
type result = Test<1 | 'test'>;
type Test<T> = T extends true ? 1 : 2;
type result = Test<boolean>;
type Test<T> = T extends true ? 1 : 2;
type result = Test<any>;
type Test<T> = T extends true ? 1 : 2;
type result = Test<never>;
上面四个例子中的前三个result结果都是 联合类型1|2,最后一个结果是result=never;
原因分析:
第一个的原因很简单,因为联合类型的分布式条件类型的特性。联合类型作为类型参数出现在条件类型的左边时,会把每个类型单独传入计算,并合并成联合类型的结果。
第二个的原因是因为boolean也是联合类型。
第三个的原因是因为条件类型中做了特殊处理,如果条件类型的左边为any时,会返回trueType和falseType的联合类型。
第四个原因是因为源码里面做了处理,当条件类型左边为never时,直接返回never。