Exclude
課題
U に割り当て可能な型を T から除外する、組み込みの Exclude<T, U> を実装して
ください。
例:
type T0 = Exclude<"a" | "b" | "c", "a">; // expected "b" | "c"
type T1 = Exclude<"a" | "b" | "c", "a" | "b">; // expected "c"
解答
ここで重要な知識は、TypeScript の Conditional 型が distributive であるということです。
これにより、T が Union 型である場合に T extends U と書くと、TypeScript は
Union 型 T の各要素に対して条件を適用していきます。
よって、解決策はとてもシンプルなものとなります。T が U に割り当て可能である
場合、その要素をスキップすればよいのです:
type MyExclude<T, U> = T extends U ? never : T;
コメント