TypeScriptの条件付き型の合併分配性でハマった

TypeScript 4.9.5 での話です。例えば次のようなコードを試してみます。 type Foo<X> = X extends (0 | 1) ? number : string; var x: Foo<null> = 1; // NG var y: Foo<null> = ""; // OK これは、null extends (0 |1)ではないことを意味します。型を集合と解釈して*1 $`\{\mathrm{null}\} \subseteq \{0, 1\}`$ ではない、と。なるほど</null></null></x>…