【发布时间】:2016-02-25 06:08:38
【问题描述】:
在 TypeScript 中,我可以定义一个全局/顶级命名空间并在另一个文件中使用它,如下所示:
namespace foo.blah {
export function baz() {
console.log('hello');
}
}
在另一个文件中,这是可行的:
foo.blah.baz();
但是,如果我从另一个模块导入一些东西:
import Thing from 'boo';
namespace foo.blah {
export function baz() {
console.log('hello');
}
}
突然我的整个文件是一个模块,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});
这可行,但 TypeScript 编译器仍然看不到 foo.blah... 作为全局存在于其他文件中。
(该文件是 Webpack 的入口点,我正在尝试从 Webpack 包中的其他模块导入内容并将它们分配给全局变量,以便它们可以在页面上的 <script> 标签中使用。)
【问题讨论】:
标签: module namespaces typescript global webpack