Как работают `Exclude<T, U>` и `Extract<T, U>` и что такое дистрибутивность?
СобеседованиеУтилитарные типы
Exclude<T, U> = T extends U ? never : T — убирает из union T те типы, которые совместимы с U
Extract<T, U> = T extends U ? T : never — оставляет только совместимые с U
- Дистрибутивность: условие применяется к каждому члену union отдельно
- Пример:
Exclude<"a" | "b" | "c", "a" | "c"> → "b"
NonNullable<T> = Exclude<T, null | undefined>
- Работает только с «голым» типовым параметром (не обёрнутым в кортеж/массив)