全局范围的扩充只能直接嵌套
Augmentations for global scope can only be directly nested
当我们尝试修改外部模块外部的全局范围时,会出现错误“全局范围的扩充只能直接嵌套在外部模块或环境模块声明中”。
要解决该错误,请添加export {}
使文件成为外部模块。
下面是错误如何发生的示例。
类型.d.ts
// ⛔️ Error: Augmentations for the global // scope can only be directly nested in external // modules or ambient module declarations.ts(2669) declare global { interface Window { example: any; } }
我正在尝试修改外部模块之外的全局范围(窗口)。
添加导出{}
语句使文件成为外部模块
要解决该错误,请添加一行export {}
以使该文件成为外部模块。
类型.d.ts
// ✅ Works now export {}; // 👈️ add this declare global { interface Window { example: any; } }
import
外部模块是包含or语句的文件export
。
如果您在文件中的任何地方使用
import
or语句,它就成为一个模块。export
在第一个代码示例中,types.d.ts
文件不包含import
or
export
语句,因此发生了错误。
错误消息意味着我们只能扩大
global
外部模块或环境模块声明中的范围。环境模块声明
错误消息的第二部分指出“或环境模块声明”。
这是环境模块的示例
。
uuid.ts
declare module 'uuid' { export function v4(): string; }
环境模块旨在为没有@types/module-name
可用包的第三方模块和不是用 TypeScript 编写的模块添加类型。
换句话说,它们用于为 JavaScript 代码添加 TypeScript 类型,因此该包可以集成到您的 TS 代码库中。
上面的环境模块uuid.ts
声明了一个名为 named 的模块的类型,uuid
并声明该模块包含一个名为 named 的函数v4
,该函数的
返回类型为string
.
即使uuid
包是用 JavaScript 编写的并且没有
@types/uuid
包,我现在也可以导入模块并使用v4()
函数并将其返回类型设置为string
.
索引.ts
import * as uuid from 'uuid'; // 👇️ function v4(): string const result = uuid.v4();
这是 TypeScript 中环境模块的用例。
错误消息“Augmentations for the global scope can only be directly nested in external modules or ambient module declarations”意味着我们只能更改全局范围:
- 包含一个
import
或一个export
语句的文件(外部模块)。 - 环境模块——描述库形状的模块,不是用 TypeScript 编写的。
我还写了一篇关于
如何从另一个文件导入值的详细指南。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: