Ich benutze TypeScript für ein ziemlich großes Projekt und frage mich, was der Standard für die Verwendung von "Error" ist. Zum Beispiel sagen, ich Hand ein Index außerhalb der Grenzen Ausnahme in Java:
throw new IndexOutOfBoundsException();
Würde die entsprechende Anweisung in TypeScript lauten:
throw new Error("Index Out of Bounds");
Welche anderen Möglichkeiten gibt es, dies zu erreichen? Was ist der akzeptierte Standard?
Jemand hat diesen Link zum MDN in einem Kommentar gepostet, und ich denke, er war sehr hilfreich. Es beschreibt Dinge wie ErrorTypes sehr gründlich.
EvalError --- Erzeugt eine Instanz, die einen Fehler repräsentiert, der im Zusammenhang mit der globalen Funktion eval() auftritt.
InternalError --- Erzeugt eine Instanz, die einen Fehler darstellt, der auftritt, wenn ein interner Fehler in der JavaScript-Engine ausgelöst wird. Z.B.. "zu viel Rekursion". "; RangeError --- Erzeugt eine Instanz, die einen Fehler darstellt, der auftritt, wenn eine numerische Variable oder ein Parameter außerhalb des gültigen Bereich liegt. ; ReferenceError --- Erzeugt eine Instanz, die einen Fehler darstellt, der auftritt, wenn eine ungültige Referenz de-referenziert wird.
SyntaxError --- Erzeugt eine Instanz, die einen Syntaxfehler darstellt, der beim Parsen von Code in eval() auftritt.
TypeError --- Erzeugt eine Instanz, die einen Fehler darstellt, der auftritt, wenn eine Variable oder ein Parameter nicht von einem gültigen Typ ist.
URIError --- Erzeugt eine Instanz, die einen Fehler darstellt, der auftritt, wenn encodeURI() oder decodeURI() ungültige Parameter übergeben werden.
Die Konvention für Bereichsüberschreitung in JavaScript ist RangeError
. Um den Typ zu prüfen, verwenden Sie if / else + instanceof
, beginnend mit dem spezifischsten bis hin zum allgemeinsten
try {
throw new RangeError();
}
catch (e){
if(e instanceof RangeError){
console.log('out of range');
}
}
Einfache Lösung für die Ausgabe und Anzeige von Meldungen bei Ausnahmen.
try {
throw new TypeError("Error message");
}
catch (e){
console.log((<Error>e).message);//conversion to Error type
}
Obiges ist keine Lösung, wenn wir nicht wissen, welche Art von Fehler vom Block ausgegeben werden kann. In solchen Fällen sollten Type Guards verwendet werden und eine angemessene Fehlerbehandlung erfolgen - siehe die Antwort von @Moriarty.