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

TypeScript中Axios的catch块error应该声明为什么合法类型?

解决方案

Catch clause variable type annotation must be 'any' or 'unknown' if specified.ts(1196) 报错是TypeScript语法层面的强制规则:catch子句捕获的错误变量不允许标注为除any、unknown之外的其他类型,因为代码运行时catch块可能捕获到任意类型的抛出值,无法提前保证是你预期的AxiosError或者Error类型。

正确的实现方式如下:

  • 优先将catch的error变量标注为unknown,比any更符合类型安全要求
  • 使用axios内置的类型守卫方法axios.isAxiosError()做类型收窄,判断通过后就可以正常访问AxiosError的相关属性(如response.status),如果需要兼容普通Error类型,再加error instanceof Error判断即可

修改后的完整代码:

try {
    self.loadingFrameMarkup = true;
    const { data }: AxiosResponse<IMarkupFrameData> = yield axios.post<IMarkupFrameData>(
        Endpoints.LoadMarkupFrame,
        {
            studyID: self.studyID,
            frameIndex: frameIndex,
        }
    );

    result = {
        ...data,
        layers: data.layers.filter((it) => it),
    };
    self.loadingFrameMarkup = false;
} catch (error: unknown) {
    if (axios.isAxiosError(error) && error?.response?.status === 401) {
        self.state = QueueState.Unauthorized;
    } else {
        self.state = QueueState.Failure;
    }
}

内容的提问来源于stack exchange,提问作者Alexei Delezhov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:54:03