WebStorm类型与在IIFE定义类型检查

WebStorm类型与在IIFE定义类型检查

问题描述:

我经常定义一个类状数据/在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时,有没有办法让这项工作更好?理想情况下,我更喜欢一种不诉诸于全局状态/定义的方法。

该问题被追踪为WEB-20246;请按照更新