Exclude
Проблема
Реализовать встроенный тип Exclude<T, U>
. Пример использования:
type T0 = Exclude<"a" | "b" | "c", "a">; // expected "b" | "c"
type T1 = Exclude<"a" | "b" | "c", "a" | "b">; // expected "c"
Решение
Для решения этой проблемы нужно знать, что условные типы в TypeScript
дистрибутивные. То есть, когда вы пишите T extends U
, где T
это объединение
элементов, TypeScript будет перебирать каждый элемент из T
и применять условие
к каждому из них.
Основываясь на этой возможности системы типов, наше решение будет выглядеть
просто. Проверяем, что T
можно присвоить к типу U
и, если это так,
пропускаем T
, возвращая never
. Иначе, это значит что текущий элемент из T
не находится в U
, а значит можем его вернуть в результате.
type MyExclude<T, U> = T extends U ? never : T;
Комментарии