如何在 TypeScript 的 catch 块中输入错误属性?

Dev*_*low 16 typescript reactjs

我有这个代码:

import axios, {AxiosError} from "axios";

try {
  some request
} catch(err:AxiosError) {
 console.log(error.response) // Doesn't work
 console.log(error.response?.data?.message) // Doesn't work
 if(error.response?.data?.statusCode === 401) {
   logout()
 }
}
Run Code Online (Sandbox Code Playgroud)

由于 TypeScript,我无法检查里面的状态代码。如何在不诉诸类型的情况下正确描述错误类型any?我找不到人们如何在 TypeScript 中处理这个错误,也许我遗漏了一些东西。

Nic*_*wer 25

Typescript 无法验证任意代码可能抛出哪种类型的值。因此直到最近,错误的类型还必须是any

} catch (err: any) {
Run Code Online (Sandbox Code Playgroud)

从 4.0 版本开始,typescript 还允许unknown.

} catch (err: unknown) {
Run Code Online (Sandbox Code Playgroud)

不支持任何其他内容。如果您想要更具体的内容,则需要编写代码来缩小抛出的事物类型的范围,或者需要使用类型断言。请记住,类型断言是告诉打字稿“我比你知道的更多,所以不要检查我的工作”的一种方式。如果您断言这是一个 AxiosError,但实际上可能是其他错误,则 typescript 无法向您指出该错误。

catch (err: unknown) {
   const error = err as AxiosError;
   //...
}
Run Code Online (Sandbox Code Playgroud)