Типизированные классы ошибок и иерархии
Создавайте пользовательские классы ошибок с размеченными типами
«Типизированные классы ошибок и иерархии» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.
Добро пожаловать
Расширение Error
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
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),
};Сериализация ошибок
function serializeError(err: AppError): Record<string, unknown> {
return { error: err.message, code: err.statusCode, name: err.name };
}Установка this.name
class MyError extends Error {
readonly name = 'MyError' as const;
constructor(msg: string) { super(msg); }
}Ошибки в 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);
});Быстрая проверка
Итоги
Часто задаваемые вопросы
Урок «Типизированные классы ошибок и иерархии» бесплатный?
Да — полный текст урока «Типизированные классы ошибок и иерархии» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 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 — локальная установка не требуется.
Все уроки этого курса
- Типизированные классы ошибок и иерархии
- Шаблон Result: Ok и Err
- Сужение перехваченных ошибок: unknown и Error
- Обработка ошибок в асинхронном коде TypeScript