2016-11-17 45 views
1

我有一個模塊是這樣的:JsDoc和WebStorm:請參閱出口

/** 
* 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將知道如何使用它的附加好處?

回答

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很糟糕。