Напиши тип Middle Объединения и сужение обновлено

Дискриминированное объединение

Вопрос

По какому полю TypeScript сузит тип в switch, если у вариантов есть общее литеральное поле?

type Shape =
  | { kind: 'circle'; r: number }
  | { kind: 'square'; a: number };

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

Напишите тип, как написали бы в коде.

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

Коротко

Правильный тип: kind. Ответ Почему так Дискриминатор - общее поле с литеральным типом. switch по нему даёт исчерпывающее сужение, а ветка default с const : never = shape ловит забытые варианты на этапе компиляции.

Правильный тип

kind

Разбор

Ответ

kind

Почему так

Дискриминатор - общее поле с литеральным типом. switch по нему даёт исчерпывающее сужение, а ветка default с const _: never = shape ловит забытые варианты на этапе компиляции.

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

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