'let和'var'在Typescript中是一样的吗?

Edi*_*nny 9 javascript var let typescript

我正在看一下AngularJS 2和Typescript,我决定用这个来学习一些打字稿的基础知识.通过许多研究,我找到了关于模块,Typescript的好主题,其中一个讨论了'let'和'var'命令来声明变量; 根据这个问题,下面的Typescript代码应该只显示一个警报并在控制台中抛出错误:

test.ts:

for(let i = 0; i < 1; i++) {
    alert(i);
}
alert(i);
Run Code Online (Sandbox Code Playgroud)

编译test.js:

for(var i = 0; i < 1; i++) {
    alert(i);
}
alert(i);
//# sourceMappingURL=test.js.map
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.编译器"忽略""let"命令并将其转换为"var"命令.为什么会这样?Typescript只适用于类吗?

我正在使用AngularJS配置'npm start',因此它会自动编译我的'test.ts'文件:

  "scripts": {
    "start": "tsc && concurrently \"npm run tsc:w\" \"npm run lite\" ",
    "lite": "lite-server",
    "postinstall": "typings install",
    "tsc": "tsc",
    "tsc:w": "tsc -w",
    "typings": "typings"
  },
Run Code Online (Sandbox Code Playgroud)

Dav*_*ret 13

但事实并非如此.编译器"忽略""let"命令并将其转换为"var"命令.为什么会这样?Typescript只适用于类吗?

默认情况下,编译器转换为ES3.该let关键字在ES3中不存在,因此发射器必须使用ES3中提供的语法发出代码...在这种情况下,let关键字的最佳替代是var关键字.

如果希望使用let关键字发出它,则必须"target": "es6"tsconfig.json或命令行选项中定位ES6- --target es6.执行此操作将使用您输入的相同代码输出.

请注意,即使您的代码在运行时工作,它也会抛出一个错误,让您知道在编译时出错了:

for(let i = 0; i < 1; i++) {
    alert(i);
}
alert(i); // compile error: cannot find name 'i'
Run Code Online (Sandbox Code Playgroud)