2016-11-09 36 views
0

我經常定義一個類狀數據/在JS型結構,如:WebStorm類型與在IIFE定義類型檢查

/** 
* @param {string} d 
* @constructor 
*/ 
function MyType(d) { 

    /** 
    * @param {string} a 
    * @param {string} [b] 
    */ 
    this.search = function (a, b) {}; 
} 

我使用jsdoc記錄我的類型和WebStorm/PhpStorm /的IntelliJ通常做了偉大的工作自動完成,並警告我,如果,如果我忘了功能ARG等...

但是,這並不工作這麼好,當我定義IIFE裏面我喜歡的類型,像這樣

var MyType = (function() { 

    /** 
    * @param {string} d 
    * @constructor 
    */ 
    function MyType(d) { 

     /** 
     * @param {string} a 
     * @param {string} [b] 
     */ 
     this.search = function (a, b) {}; 
    } 

    return MyType; 
})(); 

問題是,當我忘記函數參數時,我不會得到正確的警告。例如,下面的代碼應該會給我兩條曲線/警告,讓我知道我缺少參數。

var mt = new MyType(); 
mt.search(); 

如果我沒有在IIFE中定義我的類型,但它無法完美工作,它完美地工作。我嘗試了一些不同的東西,這些東西似乎有不同程度的成功,但都沒有完美。

如果我做

var MyType = (function() { 
    ... 
    return MyType; 
})(); 
var mt = new MyType(); 
mt.search(); 

...問題是我沒有得到警告缺少構造阿根廷,雖然它不正確地警告我失蹤search() ARG。另外,按Ctrl +點擊 MyType帶我到var MyType線,理想情況下,它應該帶我到原函數定義。

如果我做

/** @var {MyType} window.MyType */ 
window.MyType = (function() { 
    ... 
    return MyType; 
})(); 
var mt = new MyType(); 
mt.search(); 

...然後我得到有關失蹤構造ARG適當的警告和按Ctrl +點擊上MyType的正常工作,通過我沒有得到有關失蹤ARGS警告在.search()調用,和Ctrl +單擊在搜索上無法正常工作。

當使用IIFE時,有沒有辦法讓這項工作更好?理想情況下,我更喜歡一種不訴諸於全局狀態/定義的方法。

回答