TypeScript · Middle · Frage 2 von 75
Wie garantiert man, dass ein switch jedes Mitglied einer Union behandelt hat?
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; }
}
}- 1Vor das
switcheinen Kommentar// @ts-exhaustivesetzen - 2Den Wert in
defaulteiner Variablen vom Typneverzuweisen - 3Das Flag
strictSwitchincompilerOptionseinschalten
Antwort zeigen
Richtige Antwort: Den Wert in default einer Variablen vom Typ never zuweisen
Erklärung
Fügt man Shape eine neue Form hinzu und vergisst ein case, bleibt in default ein nicht leerer Typ, und die Zuweisung an never erzeugt einen Compile-Fehler. Auch das Flag noImplicitReturns und die ESLint-Regel switch-exhaustiveness-check helfen.