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;
コメント