#reactjs #typescript
Вопрос:
У меня есть следующий код:
import axios, {AxiosError} from "axios";
try {
some request
} catch(err:AxiosError) {
console.log(error.response) //doesnt work
console.log(error.response?.data?.message) //doesnt work
if(error.response?.data?.statusCode === 401) {
logout()
}
}
Я не могу проверить код состояния внутри из-за машинописного
текста, как правильно описать тип ошибки, не прибегая к любому типу?
Я не смог найти, как люди справляются с этой ошибкой в машинописном тексте, может быть, я что-то упускаю
Комментарии:
1. Typescript не может гарантировать, что будут вызваны только определенные исключения. Что, если код был
({} as any).a.b.c
. Тогда будет выдана ошибка, которая неAxiosError
была ошибкой.
Ответ №1:
Typescript не имеет возможности проверить, какие типы значений могут быть выданы произвольным кодом. Так что до недавнего времени ошибка должна была быть типовой any
.
} catch (err: any) {
Начиная с версии 4.0 и далее, typescript также позволяет unknown
.
} catch (err: unknown) {
Все остальное не поддерживается. Если вам нужно что-то более конкретное, вам нужно будет либо написать код, чтобы сузить тип того, что было брошено, либо вам нужно будет использовать утверждение типа. Имейте в виду, что утверждение типа-это способ сказать машинописному тексту: «Я знаю больше, чем вы, поэтому не проверяйте мою работу». Если вы утверждаете, что это ошибка аксиомы, но на самом деле это может быть что-то другое, typescript не сможет указать вам на эту ошибку.
catch (err: unknown) {
const error = err as AxiosError;
//...
}