我最近开始玩闭包编译器和ES6,我注意到一些我认为有点奇怪的东西。当我编译以下代码时:
export class Test
{
constructor(arg)
{
this.arg = arg;
}
}
class Test2
{
constructor(diffArg)
{
this.diffArg = diffArg;
}
}
当我使用ADVANCED进行编译时,我得到了这个输出:
java -jar closure-compiler-v20170910.jar --compilation_level ADVANCED --language_in ECMASCRIPT6_TYPED --language_out ECMASCRIPT5 --js_output_file ui.js --js javascript/*.js --externs javascript/externs/externs.js --jscomp_off missingProperties
Test.js:11: WARNING - Function and method overloads are not supported and type information might be lost
constructor(diffArg)
^^^^^^^^^^^^^^^^^^^^^^
Test.js:5: ERROR - variable arg is undeclared
this.arg = arg;
^^^
看起来编译器在抱怨,因为文件中有两个具有相同名称的函数 - 即使它们位于不同的类中 - 并且由于第二个函数替换了第一个函数而出现错误。如果我使用SIMPLE编译,我得到警告但不是错误,并且发出的代码似乎包含第二个构造函数定义。为了使代码能够正确编译,我需要将每个类放入自己的文件中。
我的问题是这是否是预期的行为 - 我不相信ES6规范中有任何关于每个文件只有一个类的内容,并且因为每个函数都在不同的类中,所以我希望我可以为每个使用相同的名称(特别是对于构造函数)。有没有办法绕过这个,或者让每个类在自己的文件中都有正确的方法?