TypeScript · Middle · Pytanie 2 z 75
Jak zagwarantować, że switch obsłużył wszystkie człony unii?
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; }
}
}- ✓Poprawna odpowiedź: Przypisać wartość w
defaultdo zmiennej typunever - 2Dodać komentarz
// @ts-exhaustiveprzedswitch - 3Włączyć flagę
strictSwitchwcompilerOptions
Wyjaśnienie
Jeśli dodasz nowy kształt do Shape i zapomnisz o case, w default zostanie niepusty typ, a przypisanie go do never spowoduje błąd kompilacji. Pomagają też flaga noImplicitReturns i reguła ESLint switch-exhaustiveness-check.