Обробка помилок є важливою складовою створення надійних додатків, а TypeScript, зі своєю потужною системою типів, робить цей процес ще простішим. Однак, коли мова заходить про роботу з кастомними помилками в TypeScript, розробники інколи стикаються з проблемами, особливо при використанні instanceof
для розрізнення типів помилок.
У цій статті ми детально розглянемо, як ефективно створювати та обробляти кастомні помилки в TypeScript. Якщо ви коли-небудь стикалися з проблемами, коли instanceof
не працює, як очікується, з вашими кастомними класами помилок, цей посібник саме для вас.
Чому кастомні помилки?
Перед тим як перейти до реалізації, давайте коротко обговоримо, чому вам може знадобитися використовувати кастомні помилки.
У багатьох додатках помилки — це більше ніж просто ознака того, що "щось пішло не так". Вони можуть нести специфічну інформацію про природу збою, що дозволяє додатку обробляти різні типи помилок по-різному. Кастомні помилки дозволяють створювати окремі типи помилок, які мають семантичний зміст і легко відрізняються одні від одних.
Визначення кастомної помилки в TypeScript
Щоб визначити кастомну помилку в TypeScript, потрібно розширити вбудований клас Error
. Однак є деякі нюанси, на які слід звернути увагу, зокрема щодо правильного налаштування ланцюга прототипів.
Ось як виглядатиме визначення кастомної помилки:
class CustomError extends Error {
constructor(message: string) {
super(message); // Викликаємо конструктор базового класу `Error`
this.name = "CustomError"; // Встановлюємо ім'я помилки на назву вашого кастомного класу помилок
// Явно встановлюємо прототип для правильного підтримання ланцюга прототипів
Object.setPrototypeOf(this, CustomError.prototype);
}
}
Ключові моменти, на які слід звернути увагу:
- Виклик super: Виклик
super(message)
ініціює конструктор класуError
, що забезпечує правильну передачу повідомлення про помилку, яке буде доступне черезerr.message
. - Ім'я помилки: Встановлення
this.name
на ім'я вашого кастомного класу помилок дає зрозуміти тип помилки при перегляді стеків помилок або логів. - Ланцюг прототипів: Найважливіший крок — це правильне налаштування ланцюга прототипів за допомогою
Object.setPrototypeOf(this, CustomError.prototype)
. Це гарантує, що перевірки за допомогоюinstanceof
працюватимуть як очікується, особливо важливо, коли TypeScript транспілюється до ES5.
Генерація кастомної помилки
Після того, як ви створили кастомний клас помилки, її генерація є простим кроком:
function someFunction() {
throw new CustomError("Це кастомна помилка");
}ty
Перехоплення та ідентифікація кастомної помилки
Тепер давайте подивимося, як ви можете перехопити цю кастомну помилку та перевірити її тип за допомогою instanceof
:
try {
someFunction();
} catch (err) {
if (err instanceof CustomError) {
console.log("Перехоплена кастомна помилка:", err.message);
} else {
console.log("Перехоплена інша помилка:", err);
}
}
Чому instanceof
може не працювати
Якщо ви спробували виконати вищезгадане і виявили, що instanceof
не працює, ось деякі можливі причини:
- Проблеми з ланцюгом прототипів: Якщо ланцюг прототипів не підтримується належним чином (наприклад, через те, як клас транспілюється або як він ініціалізується),
instanceof
може не працювати. Ось чому важливо явно налаштовувати прототип за допомогоюObject.setPrototypeOf
. - Проблеми з межами оточення: Якщо помилка виникає в іншому JavaScript середовищі (наприклад, у іншому вікні або iframe у браузері),
instanceof
може не працювати, оскільки об'єктError
є різним у кожному середовищі. - Проблеми з транспіляцією: Переконайтеся, що ваш TypeScript налаштований і транспільований правильно.
Проблеми можуть виникнути, якщо ваша конфігурація TypeScript (наприклад, параметрtarget
) або налаштування Babel не обробляють класи ES6 належним чином.
Кращі практики
- Завжди встановлюйте ланцюг прототипів: Це необхідно для того, щоб
instanceof
працював коректно. - Використовуйте змістовні імена помилок: Це допомагає під час налагодження та аналізу логів.
- Документуйте ваші помилки: Переконайтеся, що ваша команда знає, які кастомні помилки існують і що вони позначають.
Висновок
Кастомні помилки в TypeScript — це потужний інструмент для того, щоб зробити обробку помилок більш виразною та підлаштованою під потреби вашого додатку. Правильне налаштування кастомних класів помилок і забезпечення коректного ланцюга прототипів дозволяє вам використовувати всі можливості системи типів TypeScript і поведінки JavaScript під час виконання для створення надійних і підтримуваних додатків.
Наступного разу, коли ви зіткнетеся з проблемою, що instanceof
не працює як очікується, пам'ятайте про перевірку ланцюга прототипів, і ви швидко вирішите проблему.
Щасливого кодування! 💻
Перекладено з: 🚀Understanding Custom Errors in TypeScript: A Complete Guide (2025) 👍