最近起的Vue新项目中用到了typescript和axios,并且axios中使用了响应拦截器:
1 | service.interceptors.response.use( |
但是调用时发现返回值仍然是AxiosResponse<any>
,这就导致如果在then
里做一些关于res
的判断时ts会报错:
1 | this.$fetch |
经过一番Google后,终于找到了解决办法:新建一个shims-ajax.d.ts
(不一定非要是这个名,任意的*.d.ts
都可以)文件,重新声明axios
模块,然后在调用时加上泛型,如下:
1 | declare module 'axios' { |
到这里问题只解决了一半。因为现在大部分项目后端都会返回本次操作的错误码、错误信息(如果有)、业务数据,如果在每个接口返回值里都声明一次就有点冗余,所以得想办法搞成通用的。我是声明了一个命名空间来解决的:
1 | declare global { |
这样就不用写那么多冗余的返回值了,美滋滋😋