🚀Розуміння кастомних помилок у TypeScript: повний посібник (2025) 👍

pic

Обробка помилок є важливою складовою створення надійних додатків, а 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 не працює, ось деякі можливі причини:

  1. Проблеми з ланцюгом прототипів: Якщо ланцюг прототипів не підтримується належним чином (наприклад, через те, як клас транспілюється або як він ініціалізується), instanceof може не працювати. Ось чому важливо явно налаштовувати прототип за допомогою Object.setPrototypeOf.
  2. Проблеми з межами оточення: Якщо помилка виникає в іншому JavaScript середовищі (наприклад, у іншому вікні або iframe у браузері), instanceof може не працювати, оскільки об'єкт Error є різним у кожному середовищі.
  3. Проблеми з транспіляцією: Переконайтеся, що ваш TypeScript налаштований і транспільований правильно.
    Проблеми можуть виникнути, якщо ваша конфігурація TypeScript (наприклад, параметр target) або налаштування Babel не обробляють класи ES6 належним чином.

Кращі практики

  • Завжди встановлюйте ланцюг прототипів: Це необхідно для того, щоб instanceof працював коректно.
  • Використовуйте змістовні імена помилок: Це допомагає під час налагодження та аналізу логів.
  • Документуйте ваші помилки: Переконайтеся, що ваша команда знає, які кастомні помилки існують і що вони позначають.

Висновок

Кастомні помилки в TypeScript — це потужний інструмент для того, щоб зробити обробку помилок більш виразною та підлаштованою під потреби вашого додатку. Правильне налаштування кастомних класів помилок і забезпечення коректного ланцюга прототипів дозволяє вам використовувати всі можливості системи типів TypeScript і поведінки JavaScript під час виконання для створення надійних і підтримуваних додатків.

Наступного разу, коли ви зіткнетеся з проблемою, що instanceof не працює як очікується, пам'ятайте про перевірку ланцюга прототипів, і ви швидко вирішите проблему.

Щасливого кодування! 💻

Перекладено з: 🚀Understanding Custom Errors in TypeScript: A Complete Guide (2025) 👍

Leave a Reply

Your email address will not be published. Required fields are marked *