Сужение перехваченных ошибок: unknown и Error
Безопасно обрабатывайте перехваченные ошибки, имеющие тип unknown
«Сужение перехваченных ошибок: unknown и Error» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.
Добро пожаловать
Изменение в TS 4.0
// err is now: unknown
try { doSomething(); }
catch (err) {
// err.message; // Error — cannot access on unknown
}Сужение типа через instanceof
catch (err) {
if (err instanceof Error) {
console.error(err.message, err.stack);
} else {
console.error('Unknown error:', String(err));
}
}Проверка типа isError
function isError(e: unknown): e is Error {
return e instanceof Error;
}
catch (e) {
if (isError(e)) console.error(e.message);
}Сужение до пользовательского типа ошибки
catch (err) {
if (err instanceof NetworkError) { /* retry */ }
else if (err instanceof AuthError) { /* redirect */ }
else if (err instanceof Error) { /* generic */ }
else throw err;
}useUnknownInCatchVariables
{ "compilerOptions": { "useUnknownInCatchVariables": true } }Строковые ошибки
catch (err) {
const message = err instanceof Error ? err.message : String(err);
console.error(message);
}Вспомогательная функция для типизированного выбрасывания
function throwErr(msg: string, code = 500): never {
const e: AppError = Object.assign(new Error(msg), { statusCode: code });
throw e;
}Повторное выбрасывание неизвестных ошибок
catch (err) {
if (err instanceof KnownError) handle(err);
else throw err; // propagate unknowns
}Границы ошибок в React
componentDidCatch(error: unknown, info: ErrorInfo) {
if (error instanceof Error) logError(error.message);
}Тестирование перехваченных ошибок
test('catches errors', async () => {
jest.spyOn(api, 'fetch').mockRejectedValue(new NetworkError());
const result = await safeRun();
expect(result.ok).toBe(false);
});Быстрая проверка
Итоги
Часто задаваемые вопросы
Урок «Сужение перехваченных ошибок: unknown и Error» бесплатный?
Да — полный текст урока «Сужение перехваченных ошибок: unknown и Error» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.
Чему я научусь в уроке «Сужение перехваченных ошибок: unknown и Error»?
Безопасно обрабатывайте перехваченные ошибки, имеющие тип unknown Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать TypeScript Academy?
Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Сужение перехваченных ошибок: unknown и Error»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке TypeScript Academy?
Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Типизированные классы ошибок и иерархии
- Шаблон Result: Ok и Err
- Сужение перехваченных ошибок: unknown и Error
- Обработка ошибок в асинхронном коде TypeScript