【问题标题】:WebStorm type checking with type defined in an IIFE使用 IIFE 中定义的类型进行 WebStorm 类型检查
【发布时间】:2016-11-09 22:14:41
【问题描述】:

我经常在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 可以正常工作,因为我在 .search() 调用上没有收到有关缺少 args 的警告,并且 Ctrl + Click 搜索不起作用。

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

【问题讨论】:

    标签: javascript intellij-idea phpstorm webstorm jsdoc


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      • 2020-07-13
      相关资源
      最近更新 更多