TypeScript 入門 Excludeを実装する

Excludeは以下のように実装されています。

type MyExclude<T, U> = T extends U ? never : T

これを使ってみると

type T1 = MyExclude<"a" | "b" | "c", "a"> //T1 は "b" | "c"

T1は“b" | “c"になります。

なぜそうなるのかというと、内部的には以下のようになっているからです。

type T1 = ("a" extends "a" ? never : "a") | ("b" extends "a" ? never : "b") | ("c" extends "a" ? never : "c")

知っていればわかるのですが、初見だと分からない動きかなと思います。