使用 IIFE 中定义的类型进行 WebStorm 类型检查
WebStorm type checking with type defined in an IIFE
我经常在js中定义一个类似class的data/type结构,如:
/**
* @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;
})();
问题是当我忘记函数参数时我不会得到正确的警告。例如,下面的两行应该给我波浪形的 lines/warnings,让我知道我缺少参数。
var mt = new MyType();
mt.search();
如果我不在 IIFE 中定义我的类型,它可以完美地工作,但我不能让它与它完美地工作。我尝试了一些不同的东西,它们似乎取得了不同程度的成功,但 none 工作完美。
如果我这样做
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 的正确警告,并且 Ctrl + Click 在 MyType 上正常工作,因为我没有收到有关缺少 args 的警告.search()
呼叫和 Ctrl + Click 搜索功能不正常。
有没有办法在使用 IIFE 时使这项工作更好? 理想情况下,我更喜欢一种不求助于全局的方法 state/definitions。
问题被跟踪为WEB-20246;更新请关注
我经常在js中定义一个类似class的data/type结构,如:
/**
* @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;
})();
问题是当我忘记函数参数时我不会得到正确的警告。例如,下面的两行应该给我波浪形的 lines/warnings,让我知道我缺少参数。
var mt = new MyType();
mt.search();
如果我不在 IIFE 中定义我的类型,它可以完美地工作,但我不能让它与它完美地工作。我尝试了一些不同的东西,它们似乎取得了不同程度的成功,但 none 工作完美。
如果我这样做
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 的正确警告,并且 Ctrl + Click 在 MyType 上正常工作,因为我没有收到有关缺少 args 的警告.search()
呼叫和 Ctrl + Click 搜索功能不正常。
有没有办法在使用 IIFE 时使这项工作更好? 理想情况下,我更喜欢一种不求助于全局的方法 state/definitions。
问题被跟踪为WEB-20246;更新请关注