Свои классы ошибок
Вопрос
Зачем нужны свои классы ошибок и как их правильно сделать в JavaScript?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Отличать ошибки по типу через `instanceof` вместо разбора текста сообщения
Нести дополнительные данные: статус, код, поле формы
Наследование через `class X extends Error` и `super(message, options)`
Задать `this.name`, иначе в логах будет `Error`
Передавать `cause` для исходной ошибки
Иерархия: общий AppError и частные наследники
Что могут спросить следом
- Почему проверять текст сообщения ошибки плохая идея?
- Как сериализовать такую ошибку, например для отправки в лог?
- Что делать с ошибками, пришедшими из чужой библиотеки?
Разбор
Образцовый ответ: «Свой класс нужен, чтобы обработчик мог отличить ошибку по типу: if (err instanceof ValidationError), а не по строке сообщения, которую кто-то перепишет или переведёт. Плюс ошибка может нести данные: HTTP-статус, код из бэкенда, имя поля формы. Делаю через class HttpError extends Error, в конструкторе вызываю super(message, options), чтобы прокинуть cause, и задаю this.name = 'HttpError', иначе в стеке и логах будет просто Error. Обычно строю небольшую иерархию: базовый AppError и наследники для сети, валидации, доступа. Для логов важно, что JSON.stringify ошибки даёт {}, потому что message и stack неперечисляемые, поэтому сериализую поля явно. Ошибки чужих библиотек на границе модуля оборачиваю в свои типы с cause».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.