JsDoc和WebStorm:请参阅导出

时间:2016-11-17 09:15:16

标签: javascript webstorm intellisense commonjs jsdoc

我有一个这样的模块:

/**
 * Do something with target. A bunch of these methods
 * @param target
 */
function doJob(target) {
    target.something = 'value';
}

module.exports = {
    doJob
};

WebStorm正确识别此模块导出doJob,并提供良好的智能感知。

现在我想添加工具,以便我可以将所有导出的方法与目标绑定。

module.exports = {
    doJob
};

const oldExports = Object.assign({}, module.exports);
module.exports.bind = function (target) {
    const newExports = {};
    for (var key in oldExports) {
        newExports[key] = oldExports[key].bind(null, target);
    }
    return newExports;
};

这个想法是消费者可以以程序的方式获得正常的出口和使用功能,或者他们可以获得与本地target绑定的相同功能集。

我现在的问题是,如何告诉WebStorm(使用JsDoc)bind()函数的返回值与module.exports相同?

我尝试过的事情:

  • @returns {module.exports}
  • @returns {exports}
  • 在顶部声明@module,然后在@returns该符号
  • @alias - 遗憾的是,这似乎完全接管了符号,所以现在我在module.exports
  • 处不再拥有任何内容

我意识到这不是世界末日。但我觉得我太过于接近让一切都融合在一起,这让我发疯了。

知道在JsDoc中执行此操作的正确方法是什么,WebStorm / PhpStorm将知道如何使用它的额外好处?

1 个答案:

答案 0 :(得分:2)

好的,我想我明白了。

function doJob(target) {
    target.something = 'value';
}

class JobsModule {
    constructor() {
        Object.assign(this, /** @lends {JobsModule.prototype} */ {
            doJob,
            // other exports go here
        });
    }
}

module.exports = new JobsModule();

/**
 * @return {JobsModule}
 */
module.exports.bind = function (target) {
    const newExports = {};
    for (var key in new JobsModule()) {
        newExports[key] = oldExports[key].bind(null, target);
    }
    return newExports;
};

将所有内容声明为类,然后只需在需要时创建它。效率不高,但可能不是什么大问题。

TLDR: JsDoc很糟糕。