TypeScript如何在模块中优雅地使用全局变量

问题背景

用TypeScript编写js模块module时,经常遇到一种场景:需要使用在外部声明的全局变量。

这个全局变量可能是:

  • 其他模块
  • 全局变量
  • 全局函数

如果这个全局变量是在同一个工程里其他文件中声明的,我们可以直接通过import引入,但是这就增加了强依赖关系。

有时候我们不想增加这个依赖关系,或者,甚至无法提前得知这个全局变量是在哪里由谁声明的,是要怎么做呢?

解决方法

使用declare关键字

declare var <全局变量>:<类型>;

或者

declare const <全局变量>:<类型>;

如果不知道类型,可以使用any,或者省略。

这样就减少了依赖,降低了耦合度。

注意
这种情况下,在调用的时候,需要保证要使用的全局变量已经被声明并赋值,否则会报undefined。