J'utilise TypeScript pour un projet relativement volumineux et je me demande quelle est la norme pour l'utilisation de Error
s. Par exemple, disons que je remets une exception d'index hors limites en Java:
throw new IndexOutOfBoundsException();
L'instruction équivalente dans TypeScript serait-elle:
throw new Error("Index Out of Bounds");
Quels autres moyens pourrais-je accomplir cela? Quelle est la norme acceptée?
Quelqu'un a posté ce lien vers le MDN dans un commentaire et je pense que cela a été très utile . Il décrit des choses comme ErrorTypes de manière très détaillée.
EvalError --- Crée une instance représentant une erreur survenant pour la fonction globale eval ().
InternalError --- Crée une instance représentant une erreur qui se produit lorsqu'une erreur interne est générée dans le moteur JavaScript. Par exemple. "trop de récursivité".
RangeError --- Crée une instance représentant une erreur qui se produit lorsqu'une variable ou un paramètre numérique se situe en dehors de sa plage valide.
ReferenceError --- Crée une instance représentant une erreur qui se produit lors du dé-référencement d'une référence non valide.
SyntaxError --- Crée une instance représentant une erreur de syntaxe lors de l'analyse du code dans eval ().
TypeError --- Crée une instance représentant une erreur qui se produit lorsqu'une variable ou un paramètre n'est pas d'un type valide.
URIError --- Crée une instance représentant une erreur se produisant lorsque des paramètres non valides sont transmis à encodeURI () ou à decodeURI ().
La convention pour JavaScript en dehors de la plage utilise RangeError
. Pour vérifier le type, utilisez if/else + instanceof
en commençant par le plus spécifique au plus générique.
try {
throw new RangeError();
}
catch (e){
if(e instanceof RangeError){
console.log('out of range');
}
}
Solution simple pour émettre et afficher un message par exception.
try {
throw new TypeError("Error message");
}
catch (e){
console.log((<Error>e).message);//conversion to Error type
}
Ce qui précède n’est pas une solution si nous ne savons pas quel type d’erreur peut être émis par le bloc. Dans de tels cas, il convient d'utiliser des gardes et de gérer correctement les erreurs - jetez un coup d'œil à la réponse @Moriarty.
N'oubliez pas les instructions switch:
default
.instanceof
peut correspondre à la superclasse.constructor
correspondra à la classe exacte.function handleError() {
try {
throw new RangeError();
}
catch (e) {
switch (e.constructor) {
case Error: return console.log('generic');
case RangeError: return console.log('range');
default: return console.log('unknown');
}
}
}
handleError();