TypeScript捕获AxiosError报ts1196错误,如何正确抛出axios异常?
错误原因
Catch clause variable type annotation must be 'any' or 'unknown' if specified.ts(1196)
上述报错的核心原因是 TypeScript 无法在编译阶段确认 try 块内抛出的错误类型,所以规定 catch 捕获的变量只能显式标注为any或unknown类型,你直接将 error 声明为AxiosError不符合语法规则。
正确处理axios错误的写法
要在保证类型安全的前提下处理 axios 错误,可以借助 axios 官方提供的 isAxiosError 类型守卫方法做类型收窄,示例如下:
import axios, { AxiosError } from "axios"; try { // 此处放置你的业务请求逻辑 } catch (error: unknown) { // 校验是否为axios抛出的请求错误 if (axios.isAxiosError(error)) { // 这里的error会被TypeScript自动推导为AxiosError类型,可正常访问response、status等属性 throw new Error(`请求失败:${error.message},状态码:${error.response?.status ?? '无'}`, { // 可通过cause属性挂载原始错误,方便上层进一步处理 cause: error }) } // 处理非axios抛出的其他异常 throw new Error('业务执行异常', { cause: error }) }
不推荐的写法
如果你不需要严格的类型校验,也可以直接将catch变量标注为any绕开报错,但该写法会丢失类型安全保障,不建议在生产环境使用:
try { // 业务逻辑 } catch (error: any) { throw new Error(error.message) }
内容的提问来源于stack exchange,提问作者Fay Chen
相关产品推荐
相关产品推荐

