Выбор ответа Senior Объединения и сужение обновлено

Проверка полноты без assertNever

Вопрос

Какой вариант в default гарантирует ошибку компиляции, если в union добавили вариант и забыли ветку?

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

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

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

Коротко

Правильный ответ: default: return action satisfies never;. action satisfies never проверяет, что оставшийся тип присваиваем never, то есть все варианты обработаны, и при новом варианте будет ошибка. as never это утверждение, оно заставляет компилятор замолчать и полноту не проверяет.

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

  1. default: return action satisfies never;правильный ответ
  2. default: return action as never;
  3. default: return undefined as unknown as never;
  4. default: break;

Разбор

action satisfies never проверяет, что оставшийся тип присваиваем never, то есть все варианты обработаны, и при новом варианте будет ошибка. as never это утверждение, оно заставляет компилятор замолчать и полноту не проверяет. Двойное приведение тоже ничего не проверяет. break просто выходит из switch.

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

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