0Pricing
TypeScript Academy · Урок

Типизированные классы ошибок и иерархии

Создавайте пользовательские классы ошибок с размеченными типами

«Типизированные классы ошибок и иерархии» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.

Добро пожаловать

Пользовательские классы ошибок в TypeScript создают иерархию типов для безопасной и структурированной обработки ошибок.

Расширение Error

Создайте базовый класс AppError со свойством statusCode.
class AppError extends Error {
  constructor(public message: string, public statusCode = 500) {
    super(message);
    this.name = 'AppError';
  }
}

Иерархия ошибок

Создайте типизированные подклассы для конкретных типов ошибок.
class NotFoundError extends AppError {
  constructor(resource: string) { super(`${resource} not found`, 404); }
}
class ValidationError extends AppError {
  constructor(public fields: string[]) { super('Validation failed', 400); }
}

Использование instanceof

Используйте instanceof, чтобы уточнять типы ошибок в блоках catch.
try { doSomething(); }
catch (err) {
  if (err instanceof NotFoundError) res.status(404).json({ error: err.message });
  else if (err instanceof ValidationError) res.status(400).json({ fields: err.fields });
}

Размеченное объединение ошибок

Используйте размеченное объединение для типизированной обработки ошибок.
type AppError =
  | { kind: 'not_found'; resource: string }
  | { kind: 'unauthorized' }
  | { kind: 'validation'; fields: string[] };

Фабричные функции ошибок

Создайте фабричные функции для каждого типа ошибок.
const errors = {
  notFound: (r: string) => new NotFoundError(r),
  unauthorized: () => new AppError('Unauthorized', 401),
};

Сериализация ошибок

Сериализуйте ошибки для ответов API.
function serializeError(err: AppError): Record<string, unknown> {
  return { error: err.message, code: err.statusCode, name: err.name };
}

Установка this.name

Всегда задавайте this.name равным имени класса ошибки, чтобы правильно определять ошибки в журналах.
class MyError extends Error {
  readonly name = 'MyError' as const;
  constructor(msg: string) { super(msg); }
}

Ошибки в Express

Используйте типизированные пользовательские ошибки в обработчиках ошибок Express.
app.use((err: unknown, req: Request, res: Response, next: NextFunction) => {
  if (err instanceof AppError) {
    res.status(err.statusCode).json({ error: err.message });
  } else {
    res.status(500).json({ error: 'Internal error' });
  }
});

Шаблон журналирования ошибок

Журналируйте ошибки вместе с их типом и сообщением для наблюдаемости.
function logError(err: unknown): void {
  if (err instanceof Error) console.error(`[${err.name}] ${err.message}`);
  else console.error('Unknown error:', err);
}

Тестирование типов ошибок

Проверяйте, что функции выбрасывают ошибки правильных типов.
test('throws NotFoundError for missing user', async () => {
  await expect(getUser(999)).rejects.toThrow(NotFoundError);
});

Быстрая проверка

Какое ключевое слово TypeScript проверяет во время выполнения, является ли объект экземпляром класса?

Итоги

Типизированные классы ошибок и иерархии: Вы изучили основные понятия этой темы и узнали, как применять их в реальных проектах TypeScript.

Часто задаваемые вопросы

Урок «Типизированные классы ошибок и иерархии» бесплатный?

Да — полный текст урока «Типизированные классы ошибок и иерархии» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.

Чему я научусь в уроке «Типизированные классы ошибок и иерархии»?

Создавайте пользовательские классы ошибок с размеченными типами Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Типизированные классы ошибок и иерархии»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Типизированные классы ошибок и иерархии
  2. Шаблон Result: Ok и Err
  3. Сужение перехваченных ошибок: unknown и Error
  4. Обработка ошибок в асинхронном коде TypeScript
← Назад к TypeScript Academy