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; }
}
}- ✓Правильна відповідь: Присвоїти значення в
defaultзмінній типуnever - 2Додати коментар
// @ts-exhaustiveпередswitch - 3Увімкнути прапорець
strictSwitchу розділіcompilerOptions
Пояснення
Якщо додати нову фігуру в Shape і забути case, у default лишиться непорожній тип, і присвоєння в never дасть помилку компіляції. Також допомагає прапорець noImplicitReturns і ESLint-правило switch-exhaustiveness-check.