TypeScript · Middle · Запитання 2 з 75

Як гарантувати, що switch обробив усі варіанти union?

function area(s: Shape) {
  switch (s.kind) {
    case 'circle': return Math.PI * s.radius ** 2;
    case 'square': return s.size ** 2;
    default: { const _exhaustive: never = s; return _exhaustive; }
  }
}

Пояснення

Якщо додати нову фігуру в Shape і забути case, у default лишиться непорожній тип, і присвоєння в never дасть помилку компіляції. Також допомагає прапорець noImplicitReturns і ESLint-правило switch-exhaustiveness-check.

Де почитати

Помилка в запитанні

TypeScript · Middle · запитання 2

Перевірте себе

Пройдіть тест TypeScript · Middle: запитання й варіанти перемішуються, а наприкінці - розбір помилок.

Пройти цей тест