Здарова, работяги!
Скорее всего, у многих возникала проблема с типизацией ошибок. Рассмотрим кейс:
try {
// logic
} catch (error: Error) {
}
В этой ситуации ts будет ругаться:
Catch clause variable type annotation must be 'any' or 'unknown' if specified.ts(1196)
Возникает вопрос, почему any или unknown?
В ошибку может прилететь все что угодно:
throw 'hello';
throw null;
throw {};
throw undefined;
throw 123;
Поэтому единственно верным вариантом будет:
try {
// logic
} catch (error: unknown) {
}
Именно с unknown!!! Никакого any!!!
Но как тогда обработать такую ошибку?
Очень просто, написать тайпгард:
if (error instanceof Error) {
return error.message; // как пример
}
Если у вас кастомная ошибка, то нужно будет использовать другой тайпгард - type predicate, in и т.д.