Я использую typescript для достаточно большого проекта, и мне интересно, что такое стандарт для использования Ошибок. Например, скажем, я передаю исключение индекса из пределов в Java:
throw new IndexOutOfBoundsException();
Будет ли эквивалентный оператор в typescript быть:
throw new Error("Index Out of Bounds");
Какие еще способы я мог бы выполнить? Каков приемлемый стандарт?
Кто-то разместил эту ссылку в MDN в комментарии, и я думаю, что это было очень полезно. Он очень хорошо описывает такие вещи, как ErrorTypes.
EvalError --- Создает экземпляр, представляющий ошибку, возникающую в отношении глобальной функции eval().
InternalError --- Создает экземпляр, представляющий ошибку, возникающую при вызове внутренней ошибки в JavaScript-движке. Например. "слишком много рекурсии".
RangeError --- Создает экземпляр, представляющий ошибку, которая возникает, когда числовая переменная или параметр находится за пределами ее допустимого Диапазон.
ReferenceError --- Создает экземпляр, представляющий ошибку, возникающую при удалении ссылки на недопустимую ссылку.
SyntaxError --- Создает экземпляр, представляющий синтаксическую ошибку, возникающую при анализе кода в eval().
TypeError --- Создает экземпляр, представляющий ошибку, которая возникает, когда переменная или параметр не имеют допустимого типа.
URIError --- Создает экземпляр, представляющий ошибку, которая возникает, когда encodeURI() или decodeURI() передаются недопустимые параметры.
Соглашение о внедиапазоне JavaScript использует RangeError
. Чтобы проверить тип использования, если /else + instanceof
, начиная с наиболее специфичного для самого общего
try {
throw new RangeError();
}
catch (e){
if(e instanceof RangeError){
console.log('out of range');
}
}
Простое решение для испускания и отображения сообщения по исключению.
try {
throw new TypeError("Error message");
}
catch (e){
console.log((<Error>e).message);//conversion to Error type
}
Не забудьте про операторы switch:
default
.instanceof
может соответствовать суперклассу.constructor
будет соответствовать точному классу.
function handleError() {
try {
throw new RangeError();
}
catch (e) {
switch (e.constructor) {
case Error: return console.log('general error');
case RangeError: return console.log('out of range');
default: return console.log('unknown error');
}
}
}
handleError();