我經常定義一個類狀數據/在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時,有沒有辦法讓這項工作更好?理想情況下,我更喜歡一種不訴諸於全局狀態/定義的方法。