Выбор ответа Senior Условные и mapped-типы обновлено

Как отключить распределение условного типа

Вопрос

Нужен тип IsUnion<T>, но условный тип распределяется по объединению. Какой приём отключает распределение?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Обернуть обе стороны в кортеж: [T] extends [U] ? ... : ... Распределение происходит, только когда слева от extends стоит «голый» параметр типа. [T] уже не голый параметр, и union проверяется целиком. as const относится к значениям, infer без extends не существует, а ограничение параметра на…

Варианты ответа

  1. Обернуть обе стороны в кортеж: [T] extends [U] ? ... : ...правильный ответ
  2. Добавить as const к параметру типа, чтобы он не расширялся
  3. Использовать infer вместо extends в проверке объединения
  4. Объявить параметр как T extends unknown в объявлении типа

Разбор

Распределение происходит, только когда слева от extends стоит «голый» параметр типа. [T] уже не голый параметр, и union проверяется целиком. as const относится к значениям, infer без extends не существует, а ограничение параметра на распределение не влияет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.