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;
})();
我每天都会遇到这种情况。
答案 0 :(得分:4)
虽然令人困惑,但根据EcmaScript规范,这些情况都不是错误。 TypeScript不是一个linting工具。重新声明已声明的变量在EcmaScript中有效(它是无操作),并且变量声明被提升,因此在声明变量之前无法访问变量。
第一个与:
相同function myFunction(len: number) {
len = 5;
}
第二个与:
相同function myFunction() {
var b: number, a: number;
b = a;
a = 5;
}