TypeScript重新定义局部变量

时间:2014-01-24 21:33:02

标签: typescript

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

1 个答案:

答案 0 :(得分:4)

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

第一个与:

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

第二个与:

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