我为流行的http库axios创建了一个包装器
基本上,它仅具有monkey patches,get
和post
功能,可为我们的团队通过向每个请求添加取消令牌来更轻松地取消承诺请求。
当我导出此“猴子补丁” axios模块时,VSCode不会采用axios.d.ts
中定义的类型。
我正在导出以下包装对象:
const wrapper = {
/**
* Cancels all current requests
* @function
* @returns {void}
*/
cancelAll: cancelAll,
get: (url, config) => {
console.log('wrapped');
return axios.get(url, withCancelToken(config));
},
post: (url, data, config) => {
return axios.post(url, data, withCancelToken(config))
},
...getAxiosModule() // note this line
}
// This function returns a new object that
// contains all the original axios functions
// without get and post
const getAxiosModule = () => {
return Object.keys(axios)
.filter(key => !['get','post'].includes(key))
.reduce((axiosModule,currentKey, index) =>{
return Object.assign(axiosModule,{
[currentKey]: axios[currentKey]
})
}, {});
}
如果我更改此行:
...getAxiosModule()
收件人:
...axios
您可以看到类型是从原始axios模块推断出来的。 (以及我的JSDoc输入cancelAll
)
如何将类型从axios模块复制到我的自定义包装器模块?