不确定这是否是Typescript(2.1.5)或预期行为中的错误,但如果我有两个文件在同一文件夹中声明相同的块级var:
a.js
let x = 0;
Run Code Online (Sandbox Code Playgroud)
b.js
let x = 1;
Run Code Online (Sandbox Code Playgroud)
...并建立它tsc
,我得到:
a.ts(1,5):错误TS2451:无法重新声明块范围变量'x'.
b.ts(1,5):错误TS2451:无法重新声明块范围变量'x'.
这应该发生吗?或者,Typescript是否具有"默认"命名空间的概念,在整个项目中共享?
我原本以为这可能与声明合并有关,但是使用显式命名空间的等价似乎工作得很好:
c.js
namespace Test {
let x = 0;
}
namespace Test {
let x = 1;
}
Run Code Online (Sandbox Code Playgroud)
如果您没有使用模块系统,那么您将x
在全局范围内声明相同的变量.
如果你在一个模块中声明它们就可以了.
你没有得到Test
命名空间的任何错误,因为它是如何编译的:
var Test;
(function (Test) {
var x = 0;
})(Test || (Test = {}));
(function (Test) {
var x = "fefe";
})(Test || (Test = {}));
Run Code Online (Sandbox Code Playgroud)
如您所见,每个变量都在其自己的闭包内声明; 变量未声明到命名空间中.
如果你这样做:
namespace Test {
export let x = 0;
}
namespace Test {
export let x = "fefe";
}
Run Code Online (Sandbox Code Playgroud)
你将得到相同的错误,因为它被编译为:
var Test;
(function (Test) {
Test.x = 0;
})(Test || (Test = {}));
(function (Test) {
Test.x = "fefe";
})(Test || (Test = {}));
Run Code Online (Sandbox Code Playgroud)
这是预期的行为,编译器会阻止您无意中覆盖变量.
如果要在不同文件中使用全局范围中的相同变量,则可以执行以下操作:
// a.ts
var x = 1;
// b.ts
declare var x: number;
x = 3;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
506 次 |
最近记录: |