Jes*_*sse 6 namespaces module global typescript webpack
在TypeScript中,我可以定义一个全局/顶级命名空间,并在另一个文件中使用它,如下所示:
namespace foo.blah {
export function baz() {
console.log('hello');
}
}
Run Code Online (Sandbox Code Playgroud)
在另一个文件中,这有效:
foo.blah.baz();
Run Code Online (Sandbox Code Playgroud)
但是,如果我然后从另一个模块导入一些东西:
import Thing from 'boo';
namespace foo.blah {
export function baz() {
console.log('hello');
}
}
Run Code Online (Sandbox Code Playgroud)
突然,我的整个文件是一个模块,foo.blah命名空间是本地的,不是全局的,而foo.blah.baz()另一个文件中的调用失败.export namespace ...只是使命名空间成为模块导出的一部分,而不是全局.
有没有办法编写从其他模块导入但也定义全局/顶级符号的TypeScript文件?
目前我正在这样做:
import Thing from 'boo';
import * as $ from 'jquery';
namespace foo.blah {
export function baz() {
console.log('hello');
}
}
$.extend(true, window, {foo});
Run Code Online (Sandbox Code Playgroud)
哪个有效,但TypeScript编译器仍然无法看到foo.blah...在其他文件中作为全局存在.
(该文件是Webpack的入口点,我正在尝试从Webpack包中的其他模块导入内容并将它们分配给全局变量,以便它们可以<script>在页面上的标记中使用.)
当您添加 时import,您将从内部模块切换到外部模块,如规范所述:
在外部模块中,文件之间的关系是根据文件级别的导入和导出来指定的。在 TypeScript 中,任何包含顶级导入或导出的文件都被视为外部模块。
http://www.typescriptlang.org/Handbook#modules-going-external
外部模块背后的理念是避免全局对象,为什么不使用foo.blah(以及您需要的所有内容)创建一个新模块并按照 TypeScript 的预期导入它呢?