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
相关产品推荐
相关产品推荐

