Как ввести свойство ошибки в типографском тексте блока catch?

#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;
   //...
}