問題 & 解答
組み込みのExclude<T, U>
を自前で実装する
Conditional Typesの分配法則を用いて、次のように記述する。
例えば
T
:"a" | "b" | "c" | "d"
U
:"c" | "d" | "e" | "f"
であるとき、まず"a"
はU
のサブセットではないので、T
つまり"a"
が返る。
一つ飛ばして"c"
はU
のサブセットなので、never
が返る。
分配法則によりこれらの結果を結合したものが返るのでMyExclude<"a" | "b" | "c" | "d", "c" | "d" | "e" | "f">
は"a" | "b"
をあらわす
調べたこと
Exclude型
差集合を表す型
TypeScript: Documentation - Utility Types
Conditional TypesとDistributive(分配法則)
- Conditional types がGeneric型である時、Union型が渡された場合は、分配法則に従う。
StrArrOrNumArr
では、T
としてUnion型のstring | number
が与えられている。