极简的 demo 如下:
Question1: 为什么 type g
是 2
而不是 1
?
// 1
type f = [never] extends [infer S1, ...infer S2]
? ([S1] extends [never] ? 1 : 2)
: 3
// why 2
type g = [never] extends [infer S1, ...infer S2]
? ([never] extends [S1] ? 1 : 2)
: 3
按我理解,type f
和 g
相等,因为 S1
是 never
.
Question2: 为什么 h
是 2
不是 1
?
// 1
type i = [never] extends [infer S1]
? ([never] extends [S1] ? 1 : 2)
: 3
// why 2
type h = [never] extends [infer S1, ...infer S2]
? ([never] extends [S1] ? 1 : 2)
: 3
按我理解, type i
和 h
相等,因为 S2
没用.
Question3: 为什么 type k
是 never
?
// 1
type j = [never] extends [infer S1, ...infer S2]
? (never extends S1 ? 1 : 2)
: 3
// why never ?
type k = [never] extends [infer S1, ...infer S2]
? (S1 extends never ? 1 : 2)
: 3
我以为 k
应该是 1
2
3
其中一个.
谢邀,没搞过太复杂的类型,试了好久,好像被我试出原因了 🤣
排除意外,把你的问题精简,最简形式
应该返回
1
吧, 不能是2
吧?让我惊掉下巴的 a 居然是
never
这条语句无论如何不可能返回
never
啊,抛出异常了还是咋的?(S1 extends never ? 1 : 2)
我觉得应该是这条语句出bug了 ,
为啥会出 bug 呢,经过我一个多小时的研究。。。。
原因居然是。。。。。。。。
先点个赞吧。。。
infer
出来的S1
,并不是单纯的never
, 要用NonNullable
处理一下,就正确了。同理把你的3个问题
infer
推导出来的类型,全都加上NonNullable
就正确了问题1
问题2
问题3