Vue3+TS调用axios传params时报TS2345类型不匹配错误
问题场景
在Vue 3/Vite/TypeScript技术栈项目中发起axios调用时,IDE内params字段被红色下划线高亮标注,代码运行功能正常,但无法完成项目构建。
相关代码
导入语句:
import axios from "axios";
请求逻辑代码:
async userstatusconfirmed() { let url = "/auth/amiconfirmed"; let headers = authHeader(); let params = {withCredentials: true} await axios.get(url, {params, headers} ).then((response) => { if (response.status == 200) { if (response.data.confirmed == true) { this.$router.push({ name: "home" }); } } }); },
构建报错信息
TS2345: Argument of type '{ params: { withCredentials: boolean; }; headers: Record<string, string>; }' is not assignable to parameter of type 'AxiosRequestConfig<any>'. Object literal may only specify known properties, and 'params' does not exist in type 'AxiosRequestConfig<any>'.
故障原因
- 配置项层级写错:
withCredentials是axios请求配置的顶级字段,作用是控制跨域请求是否携带凭证,不属于params(URL查询参数对象)的内部属性,错误嵌套会触发类型校验异常。 - 本地axios类型定义异常:依赖版本不匹配、node_modules类型缓存损坏时,TS无法正确识别
AxiosRequestConfig类型上的params属性,直接抛出属性不存在的错误。
修复步骤
- 调整配置项层级:把
withCredentials从params对象中移出,和headers、params保持同级,params仅用来存放需要拼接到URL后的查询参数,当前接口无查询参数时可直接省略params字段。 - 修复类型缓存问题:删除项目下的
node_modules目录和对应包管理器的lock文件,重新执行依赖安装命令,拉取匹配版本的axios类型定义,消除类型识别错误。
修复后的参考代码:
async userstatusconfirmed() { const url = "/auth/amiconfirmed"; const headers = authHeader(); await axios.get(url, { headers, withCredentials: true, // 存在URL查询参数时再配置params,示例:params: { page: 1 } }).then((response) => { if (response.status === 200 && response.data.confirmed === true) { this.$router.push({ name: "home" }); } }); },
内容的提问来源于stack exchange,提问作者Anekdotin
相关产品推荐
相关产品推荐

