将现有的类型用于包装的模块

时间:2018-10-18 11:32:41

标签: javascript typescript node-modules typescript-typings

我为流行的http库axios创建了一个包装器

基本上,它仅具有monkey patchesgetpost功能,可为我们的团队通过向每个请求添加取消令牌来更轻松地取消承诺请求。

问题

当我导出此“猴子补丁” 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]
            })
        }, {});
}

结果

VSCode不会从此新对象推断原始的axios类型。 No typings for patched module

但是

如果我更改此行: ...getAxiosModule()

收件人:

...axios

All typings inferred

您可以看到类型是从原始axios模块推断出来的。 (以及我的JSDoc输入cancelAll

问题

如何将类型从axios模块复制到我的自定义包装器模块?

0 个答案:

没有答案