gpt4 book ai didi

TypeScript 重新定义局部变量

转载 作者:行者123 更新时间:2023-12-05 01:47:51 25 4
gpt4 key购买 nike

TypeScript 编译器没有将以下情况标记为错误的具体原因是什么?

myFunction(len: number) {
var len: number = 5; // re-definition of local variable (name clash)
}

另一个:

myFunction() {
var b: number = a; // variable a is accessed before it is declared/initialized
var a: number = 5;
}

在将 Javascript 转换为 TypeScript 时,我至少遇到过两次这两种情况。如果编译器警告我,我可以节省数小时的调试时间。

typescript 0.9.5

编辑:下面是 TypeScript 编译器编译为有效 Javascript 的一些无效 TypeScript 的示例:

class MyClass {
myFunction(myParam: number) {
myParam = 'abc';
}
}

如果我将其保存在 Visual Studio 中,TypeScript 会将其标记为错误,但仍会将其编译为

var MyClass = (function () {
function MyClass() {
}
MyClass.prototype.myFunction = function (myParam) {
myParam = 'abc';
};
return MyClass;
})();

我每天都会遇到这种情况。

编辑 2: 提交的请求:https://typescript.codeplex.com/workitem/2128

最佳答案

虽然令人困惑,但根据 EcmaScript 规范,这两种情况都不是错误。 TypeScript 不是 linting 工具。重新声明一个已经声明的变量在 EcmaScript 中是有效的(这是一个空操作),并且变量声明被提升,所以你无法在声明变量之前访问它。

第一个是一样的:

function myFunction(len: number) {
len = 5;
}

第二个是一样的:

function myFunction() {
var b: number, a: number;
b = a;
a = 5;
}

关于TypeScript 重新定义局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21342881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com