使用IIFE中定义的类型进行WebStorm类型检查

时间:2016-11-09 10:09:09

标签: javascript intellij-idea phpstorm webstorm jsdoc

我经常在js中定义类类数据/类型结构,例如:

/**
 * @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();

...问题是我没有得到关于错过构造函数arg的警告,尽管它确实警告我关于丢失的search() arg。此外,MyType上的 Ctrl + Click 将我带到var MyType行,理想情况下它应该带我到orig函数定义。

如果我这样做

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

...然后我得到关于缺少构造函数arg的正确警告,并且MyType上的 Ctrl + Click 正常工作,我没有收到关于{{{ 1}}调用,并且 Ctrl +单击在搜索上无法正常工作。

使用IIFE时,有没有办法让这项工作更好?理想情况下,我更喜欢一种不采用全局状态/定义的方法。

1 个答案:

答案 0 :(得分:0)

问题跟踪为WEB-20246;请关注它以获取更新