2016-11-17 4 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}
  • その後、@returnsそのシンボル
  • @alias、上部に@moduleを宣言 - これは残念ながら完全に今、シンボルを引き継ぐように見えます私はもう何も持っていません。module.exports

私はこれが世界の終わりではないことを認識しています。しかし、私はすべてが一緒にフィットするように近くにsoooooされているように感じる、それは私を狂って運転しています。

WebStorm/PhpStormは、JsDocでこれを行う適切な方法は何ですか?

答えて

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は吸う。