Dazu verwenden wir den neverTyp (eingeführt in TypeScript 2.0), der Werte darstellt, die "nicht" auftreten sollten.
Der erste Schritt besteht darin, eine Funktion zu schreiben:
function assertUnreachable(x: never): never {
throw new Error("Didn't expect to get here");
}
Verwenden Sie es dann in dem defaultFall (oder gleichwertig außerhalb des Schalters):
function getColorName(c: Color): string {
switch(c) {
case Color.Red:
return 'red';
case Color.Green:
return 'green';
}
return assertUnreachable(c);
}
An dieser Stelle wird ein Fehler angezeigt:
return assertUnreachable(c);
~~~~~~~~~~~~~~~~~~~~~
Type "Color.Blue" is not assignable to type "never"
Die Fehlermeldung zeigt die Fälle an, die Sie vergessen haben, in Ihren vollständigen Schalter aufzunehmen! Wenn Sie mehrere Werte weggelassen haben, wird ein Fehler angezeigt, z Color.Blue | Color.Yellow.
Beachten Sie, dass Sie dies vor dem Anruf strictNullChecksbenötigen , wenn Sie es verwenden (andernfalls ist es optional).returnassertUnreachable
Sie können ein wenig schicker werden, wenn Sie möchten. Wenn Sie beispielsweise eine diskriminierte Union verwenden, kann es hilfreich sein, die diskriminante Eigenschaft in der Assertionsfunktion für Debugging-Zwecke wiederherzustellen. Es sieht aus wie das:
interface Dog {
species: "canine";
woof: string;
}
interface Cat {
species: "feline";
meow: string;
}
interface Fish {
species: "pisces";
meow: string;
}
type Pet = Dog | Cat | Fish;
function throwBadPet(p: never): never;
// Implementation signature
function throwBadPet(p: Pet) {
throw new Error('Unknown pet kind: ' + p.species);
}
function meetPet(p: Pet) {
switch(p.species) {
case "canine":
console.log("Who's a good boy? " + p.woof);
break;
case "feline":
console.log("Pretty kitty: " + p.meow);
break;
default:
throwBadPet(p);
}
}
Dies ist ein schönes Muster, da Sie während der Kompilierung Sicherheit erhalten, um sicherzustellen, dass Sie alle Fälle behandelt haben, die Sie erwartet haben. Und wenn Sie eine Eigenschaft erhalten, die wirklich außerhalb des Gültigkeitsbereichs liegt (z. B. hat ein JS-Aufrufer eine neue erstellt species), können Sie eine nützliche Fehlermeldung ausgeben.