TypeScript tsc生成的js文件中出现“重复标识符”错误

qxsslcnc  于 2022-10-29  发布在  TypeScript
关注(0)|答案(7)|浏览(401)

假设我们有以下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文件中得到的唯一错误。

eagi6jfj

eagi6jfj1#

当我们知道已经发出了函数时,我们可以不发出var。注意,这并不能解决 every case,因为你可能在单独的文件中有这些声明。

du7egjpx

du7egjpx2#

实际上,我认为在本例中发出错误是不正确的:如果已经声明了一个空的“var”,那么它应该是一个noop。

pgky5nke

pgky5nke3#

@d180cf根据JS语义,额外的var是一个no-op。typescript编译器在这里施加了更严格的语义;这里假设您犯了be错误,而且您并不想重新声明变量,这可能会导致一个实际bug,或者与作用域有关,或者与不正确的使用有关。
我同意@RyanCavanaugh的观点,即编译器的输出应该经得起自己的检查。

kmbjn2e3

kmbjn2e34#

如果使用outDir和exclude选项,是否可以完全避免这种情况🌹

rqmkfv5c

rqmkfv5c6#

@mhegazy我们也许应该推迟公关,直到树转换工作进来后?不想征求一次性工作

n6lpvg4x

n6lpvg4x7#

这是正确的。以下是需要注意的问题:#5595的最大值

相关问题