我获取了一些已编译的TypeScript的输出(也尝试使用CoffeeScript)并将其放入WebStorm中。当我这样做时,JSHint抱怨“'Snake'已被定义为”Snake函数的内部声明。
var __extends = this.__extends || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
var Animal = (function () {
function Animal(name) {
this.name = name;
}
Animal.prototype.move = function (meters) {
alert(this.name + " moved " + meters + "m.");
};
return Animal;
})();
var Snake = (function (_super) {
__extends(Snake, _super);
function Snake(name) { //Warning registered here
_super.call(this, name);
}
Snake.prototype.move = function () {
alert("Slithering...");
_super.prototype.move.call(this, 5);
};
return Snake;
})(Animal);
我可以使用/*jshint -W004 */
禁用警告,但似乎警告无效,因为我们在功能范围内。
现在奇怪的部分。如果我将__extends
调用向下移动到函数声明之后,则错误消失。
function Snake(name) {
_super.call(this, name);
}
__extends(Snake, _super);
我真的有两个问题,但第一个是我的主要问题,我将给出答案。
__extends
调用会产生什么后果?答案 0 :(得分:1)
似乎它可能会抱怨,因为内部变量正在遮蔽同名的外部变量,这可能会造成混淆。
https://stackoverflow.com/a/17852430/378151
根据其他SO回答,2013年7月就此行为做出了承诺。 Douglas Crockford stated(关于JSLint)
JSLint现在在定义与其名称相同的var时发出警告 外部范围内的东西。这是令人困惑的,因为读者 不能轻易分辨出他正在看哪个变量。它有时是一个 错误,因为新变量意外隐藏旧变量。在 在某些情况下,旧的是预期的。