Exclude
Завдання
Реалізувати вбудований тип Exclude<T, U>
.
Виключити з типу
T
ті типи, що є присвоюваними вU
type T0 = Exclude<"a" | "b" | "c", "a">; // "b" | "c"
type T1 = Exclude<"a" | "b" | "c", "a" | "b">; // "c"
Розв’язок
Для вирішення цього завдання важливо знати, що умовні типи в TypeScript дистрибутивні.
Тож, коли ви пишете T extends U
, де T
є об’єднанням, TypeScript застосує
умову до кожного елементу з T
.
Зважаючи на це, рішення виглядатиме просто. Ми перевірятимемо, чи T
можна
присвоїти в тип U
і, якщо це так, будемо пропускати T
, повертаючи never
.
Іншими словами, це означає, що поточний елемент із T
не знаходиться в U
, а
отже ми можемо повернути його:
type MyExclude<T, U> = T extends U ? never : T;
Коментарі