为什么单元类型交集的并集会导致 never 类型?

Vee*_*aha 0 generics types type-level-computation typescript

您能否解释一下为什么以下类型表达式会产生never类型?为什么第二个表达式的计算结果为"c"

type t1 = ("a" & "b") | ("c" & "d"); // never
type t2 = ("a" & "b") | "c"; // "c"
Run Code Online (Sandbox Code Playgroud)

Rya*_*ugh 5

请记住,这never是包含零值的类型。

t1:不存在同时为"a"和 的值"b",因此类型"a" & "b"与 相同never。对于c和也是如此d

t2:如果一个值是或同时是和 的"c"值,那么它一定是。"a""b""c"

您可以将never其视为 的恒等操作数,与加法的恒等操作数|相同:是03 + 03