Ответ вслух Middle Ошибки обновлено

Свои классы ошибок

Вопрос

Зачем нужны свои классы ошибок и как их правильно сделать в JavaScript?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Свой класс нужен, чтобы обработчик мог отличить ошибку по типу: if (err instanceof ValidationError), а не по строке сообщения, которую кто-то перепишет или переведёт. Плюс ошибка может нести данные: HTTP-статус, код из бэкенда, имя поля формы.

Что должно прозвучать в ответе

  • Отличать ошибки по типу через `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 ошибок.

Термины по теме