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; }
  }
}

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.

Do poczytania

Błąd w pytaniu

TypeScript · Middle · pytanie 2

Sprawdź się

Rozwiąż test TypeScript · Middle: pytania i odpowiedzi są tasowane, a na końcu czeka przegląd błędów.

Rozwiąż ten test