【问题标题】:JsDoc and WebStorm: Refer to exportsJsDoc 和 WebStorm:参考导出
【发布时间】:2017-03-31 18:08:22
【问题描述】:

我有一个这样的模块:

/**
 * 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 知道如何使用它的额外好处吗?

【问题讨论】:

    标签: javascript webstorm intellisense commonjs jsdoc


    【解决方案1】:

    好的,我想我明白了。

    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;
    };
    

    将所有内容声明为一个类,然后在需要时创建它。效率不高,但可能没什么大不了的。

    【讨论】:

      猜你喜欢
      • 2013-08-25
      • 2015-09-03
      • 2017-11-13
      • 2018-06-07
      • 2014-12-03
      • 2013-08-07
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多