2016-11-17 12 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과 똑같은 것이라고 말할 수 있습니까?

것들 나는 시도했다 : 심볼

  • @alias@returns

    • @returns {module.exports}
    • @returns {exports}
    • 다음, 상단에 @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은 흡인합니다.