在Axios try-catch语句中为异常e添加any类型时触发Unexpected token, expected ')'错误的技术问询
解决Catch块中类型标注的语法错误问题
这个问题我太熟悉了!你碰到的核心矛盾在于:原生JavaScript并不支持在catch的参数上直接添加类型标注——你写的catch (e: any)是TypeScript专属语法,但如果你的代码文件没有以.ts/.tsx为后缀,或者项目的TypeScript编译配置没正确生效,JS解析器就会把: any当成非法语法,抛出「Unexpected token, expected ')'」错误。
而你移除类型标注后代码能运行,是因为catch(e)是标准ES语法,任何JS环境都能识别;但Git流水线要求显式添加类型,说明它在执行TypeScript类型检查,所以咱们得让类型标注被正确处理。
下面给你几个可行的解决办法:
1. 确保文件使用TypeScript扩展名
把你的文件后缀从.js改成.ts(普通TS文件)或.tsx(React组件文件)。这样TypeScript编译器就能正确解析catch (e: any)的语法,既满足流水线的类型要求,也不会有语法错误。
2. 在JavaScript文件中手动断言类型(如果不能改扩展名)
如果因为项目限制必须保留.js后缀,可以在catch块内部用类型断言来标注e的类型,这样既符合JS语法,又能通过Git流水线的类型检查:
try { await axios.patch("/scriptschedule/" + pk + "/", postData); setSubmitting(false); afterCreateOrUpdateAction(); } catch (e) { // 手动断言e为any类型 const error = e as any; setSubmitting(false); let message = error.response.data && error.response.data.non_field_errors ? error.response.data.non_field_errors : "Error. Please try again"; addToast({ id: "1", title: "Error", color: "danger", text: <p>{message}</p>, }); }
3. 检查TypeScript配置(如果已经是TS文件)
如果你的文件已经是.ts/.tsx但还是报错,检查项目根目录的tsconfig.json:
- 确认
compilerOptions.target设置为ES6或更高版本(ES6才支持await和箭头函数等语法) - 确保
include数组包含了你的这个文件,避免TS编译器忽略它
总结一下:你的代码逻辑本身没问题,只是混淆了JavaScript和TypeScript的语法规则——类型标注是TS的特性,必须让TS编译器来处理它,才能同时满足运行和流水线检查的要求。
内容的提问来源于stack exchange,提问作者NeERAJ TK
相关产品推荐
相关产品推荐

