You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript 中如何通过 error.response.status 捕获请求错误

解决方案

场景1:使用Axios发起请求

  1. 导入内置AxiosError类型,编写类型守卫函数收窄错误类型:
import type { AxiosError } from 'axios'

// 类型守卫:判断是否为Axios抛出的错误
function isAxiosError(error: unknown): error is AxiosError {
  return (error as AxiosError)?.isAxiosError === true
}
  1. 在catch块中分层判断后获取状态码:
try {
  // 你的请求业务代码
  await axios.get('/xxx/xxx')
} catch (error: unknown) {
  if (isAxiosError(error)) {
    // 已得到服务端响应的场景
    if (error.response) {
      // 这里可以直接读取status,类型完全合法
      const statusCode = error.response.status
      // 后续根据状态码做对应处理:比如401跳转登录、403提示无权限等
    } 
    // 请求已发出但无响应的场景(网络错误、服务端无响应等)
    else if (error.request) {
      console.log('网络异常,请稍后重试')
    }
    // 请求未发出的场景(配置错误、参数校验失败等)
    else {
      console.log('请求异常:', error.message)
    }
  } else {
    // 非请求相关的业务逻辑报错
    console.log('系统异常:', error)
  }
}

场景2:使用Angular HttpClient发起请求

你尝试过的HttpErrorResponse是Angular专属的错误类型,处理方式如下:

  1. 导入HttpErrorResponse类型,编写类型守卫:
import { HttpErrorResponse } from '@angular/common/http'

function isHttpErrorResponse(error: unknown): error is HttpErrorResponse {
  return error instanceof HttpErrorResponse
}
  1. 错误处理中读取状态码:
this.http.get('/xxx/xxx').subscribe({
  next: (res) => { /* 正常业务逻辑 */ },
  error: (error: unknown) => {
    if (isHttpErrorResponse(error)) {
      const statusCode = error.status
      // 后续错误处理逻辑
    }
  }
})

注意事项

  • 不要直接给catch的error注解为any,会完全丢失TS类型检查能力,反而更容易出现隐藏问题。
  • 必须分层判断response是否存在,避免网络异常场景下访问undefined的属性导致运行时报错。

问题参考截图

问题截图1
问题截图2

内容的提问来源于stack exchange,提问作者Fiddle Freak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:36:08