在TypeScript中,“declare global”是什么意思?

44
"

什么是“declare global”,它是如何实现的?我在 Lodash typings 中发现了这段代码。问题是,当我尝试将其完全复制到my.d.ts文件中时,由于全局不是命名空间、模块、函数或变量,我无法这样做。所以问题是,这种声明在 Typescript 中是如何实现的。

PS:也许有一些额外的编译器选项可以允许这样做吗?

"
declare global {
    interface Set<T> { }
}
1个回答

62

这不依赖于编译器设置。 declare global 在带有 importexport 的文件中使用,以在全局作用域中声明内容。在包含 importexport 的文件中这是必要的,因为此类文件被视为模块,而在模块中声明的所有内容都在模块作用域中。

在非模块文件(即不包含 import/export)中使用 declare global 是错误的,因为该文件中的所有内容已经在全局作用域中了。


11
我已经通过实践学习了这些原则,但是是否有官方文件来解释它们呢? - John Hou
4
@JohnHou 目前有 https://www.typescriptlang.org/docs/handbook/declaration-merging.html#global-augmentation 和 https://www.typescriptlang.org/docs/handbook/declaration-files/templates/global-modifying-module-d-ts.html。 - Mörre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接