如果您没有使用模块系统,那么您将x
在全局范围内声明相同的变量.
如果你在一个模块中声明它们就可以了.
你没有得到Test
命名空间的任何错误,因为它是如何编译的:
var Test; (function (Test) { var x = 0; })(Test || (Test = {})); (function (Test) { var x = "fefe"; })(Test || (Test = {}));
如您所见,每个变量都在其自己的闭包内声明; 变量未声明到命名空间中.
如果你这样做:
namespace Test { export let x = 0; } namespace Test { export let x = "fefe"; }
你将得到相同的错误,因为它被编译为:
var Test; (function (Test) { Test.x = 0; })(Test || (Test = {})); (function (Test) { Test.x = "fefe"; })(Test || (Test = {}));
这是预期的行为,编译器会阻止您无意中覆盖变量.
如果要在不同文件中使用全局范围中的相同变量,则可以执行以下操作:
// a.ts var x = 1; // b.ts declare var x: number; x = 3;