我有一个这样的模块:
/**
* 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将知道如何使用它的额外好处?
答案 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很糟糕。