有一个简单的 TS 包用作 CommonJS 模块并且没有导出。 TS文件被编译为同名的JS文件并用作require('package/option-foo')
.
tsconfig.json:
{
"compilerOptions": {
"target": "es5"
}
}
选项-foo.ts:
declare const GlobalVar: any;
function baz() {}
if (GlobalVar.foo) GlobalVar.baz = baz;
选项栏.ts:
declare const GlobalVar: any;
function baz() {}
if (GlobalVar.bar) GlobalVar.baz = baz;
这里重要的部分是option-foo
and option-bar
are 从未一起使用过。项目中还有其他免费的TS文件,但它们不会影响任何东西,只是需要将其转译为JStsc
run.
When tsc
运行,它抛出
无法重新声明块作用域变量“GlobalVar”。
重复的函数实现。
无法重新声明块作用域变量“GlobalVar”。
重复的函数实现。
for GlobalVar
and baz
在两个文件中。
如何处理这个问题而不使构建过程或这两个 TS 文件的输出复杂化?
TL;DR写吧export {}
在文件的最外层范围内。
在某些时候,需要对文件是否应被视为文件进行语义消歧。module(并有自己的范围)或script(并与其他脚本共享全局范围)。
在浏览器中,这很容易 - 您应该能够使用<script type="module">
标签,您将能够使用模块。
但是其他使用 JavaScript 的地方又如何呢?不幸的是,目前还没有标准方法来进行这种区分。
TypeScript 决定解决这个问题的方法是简单地声明模块是任何包含导入或导出的文件.
因此,如果您的文件没有任何顶级import
or export
声明,那么您偶尔会看到全局声明相互干扰的问题。
为了解决这个问题,你可以简单地有一个export
不导出任何内容的声明。换句话说,只需写
export {};
文件顶层的某处。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)