在这个打字稿游乐场中看到的
type FirstOrSecond<condition, T1, T2> = condition extends never ? T1 : T2
type foo = never extends never ? () => 'hi' : (arg1: never) => 'hi'
type wtf = FirstOrSecond<never, () => 'hi', (arg1: never) => 'hi'>
通用FirstOrSecond
将never
分配给wtf
变量,而显式定义foo
则将() => 'hi'
分配为类型。
为什么普通的怪物会出故障?
答案 0 :(得分:2)
Distributive conditional types。 This is intentional。
通常应用的解决方法是在以下情况下将类型包装为单成员元组:
type FirstOrSecond<condition, T1, T2> = [condition] extends [never] ? T1 : T2