假设我们有以下ts文件:
function abc() {
// ...
}
module abc {
export const def = 123;
}
tsc将此转换为以下js文件:
function abc() {
// ...
}
var abc;
abc.def = 123; // well, there is actually a function (abc) { ... } wrapper here
现在,如果我尝试将这个js文件包含到另一个ts文件中,tsc将扫描它刚刚生成的js文件,并报告一个错误:“重复标识符abc”。删除“var abc”部分后,错误将消失。已尝试使用最新的typescript@next(原来是1.9.0-dev.20160214)。
好消息是,这是我从一个异常复杂的js文件中得到的唯一错误。
7条答案
按热度按时间eagi6jfj1#
当我们知道已经发出了函数时,我们可以不发出
var
。注意,这并不能解决 every case,因为你可能在单独的文件中有这些声明。du7egjpx2#
实际上,我认为在本例中发出错误是不正确的:如果已经声明了一个空的“var”,那么它应该是一个noop。
pgky5nke3#
@d180cf根据JS语义,额外的var是一个no-op。typescript编译器在这里施加了更严格的语义;这里假设您犯了be错误,而且您并不想重新声明变量,这可能会导致一个实际bug,或者与作用域有关,或者与不正确的使用有关。
我同意@RyanCavanaugh的观点,即编译器的输出应该经得起自己的检查。
kmbjn2e34#
如果使用outDir和exclude选项,是否可以完全避免这种情况🌹
2wnc66cl5#
欢迎公关!
rqmkfv5c6#
@mhegazy我们也许应该推迟公关,直到树转换工作进来后?不想征求一次性工作
n6lpvg4x7#
这是正确的。以下是需要注意的问题:#5595的最大值