кастомные ошибки — обычный способ сделать обработку ошибок точнее новый класс наследуют от встроенного класса Error тип задают через свойство name, например CustomError для контекста добавляют специализированные поля в JS используют extends Error и вызов super(message) это упрощает фильтрацию и логирование ошибок в продакшене семантичные ошибки делают отладку и сопровождение понятнее
Как создать собственный тип ошибки в JavaScript или TypeScript?
кастомные ошибки — обычный способ сделать обработку ошибок точнее новый класс наследуют от встроенного класса Error тип задают через свойство name, например CustomError для контекста добавляют специализированные поля…
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Как создать собственный тип ошибки в JavaScript или TypeScript?
- кастомные ошибки — обычный способ сделать обработку ошибок точнее
- новый класс наследуют от встроенного класса Error
- тип задают через свойство
name, напримерCustomError - для контекста добавляют специализированные поля
- в JS используют
extends Errorи вызовsuper(message) - это упрощает фильтрацию и логирование ошибок
- в продакшене семантичные ошибки делают отладку и сопровождение понятнее
Подробный ответ
Основной ответ
Да, в JavaScript и TypeScript можно определить собственный custom error type. Для этого создают класс, унаследованный от встроенного Error. Такой подход позволяет точнее обрабатывать исключения, улучшает отладку и даёт возможность добавить свойства и методы, описывающие контекст ошибки.
Ключевые моменты
- Наследование от Error: создаётся расширяющий Error класс, а конструктор базового класса вызывается через
super(message). - Поддержка стека вызовов: следует корректно задать
this.name; в Node.js также можно вызватьError.captureStackTrace, чтобы стек отражал новый тип ошибки. - Дополнительные свойства: в класс часто добавляют
code,detailsи другую бизнес-логику, необходимую для обработки исключения.
Практический контекст
В системах со сложной бизнес-логикой отдельные типы помогают различать ошибки валидации, сети и доступа. Например, REST API может использовать ValidationError с HTTP-кодом 400 и AuthenticationError с кодом 401, чтобы middleware сформировал корректный ответ клиенту.
Пример простого custom error в JS:
class ValidationError extends Error {
constructor(message) {
super(message);
this.name = 'ValidationError';
if (Error.captureStackTrace) {
Error.captureStackTrace(this, ValidationError);
}
}
}
Такой способ широко применяют с React 18+, Node.js 14+ и другими современными стэками, чтобы сделать управление ошибками более понятным и удобным.