记几个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。

 

posted @ 2022-11-07 10:38  闯入码途的水产人  阅读(27)  评论(0编辑  收藏  举报