在 TypeScript 中,declare global
用于在模块内部扩展全局作用域。当你在模块(任何包含顶级 import
或 export
的文件)中工作时,TypeScript 会将该文件的作用域视为局部作用域。如果你需要添加或修改全局作用域中的类型(比如扩展全局 Window
接口或添加新的全局变量),你可以使用 declare global
。
使用场景
- 扩展现有全局类型:例如,如果你的项目依赖于一个第三方库,该库向全局
window
对象添加了新的属性,但这些属性并未在库的类型定义中。 - 添加新的全局类型:如果你需要在全局作用域中定义全新的类型或变量,供整个项目中的多个模块使用。
基本用法
以下是使用 declare global
的一些示例:
扩展全局 Window
接口
如果你的应用或库向 window
对象添加了新属性,可以如下声明它们:
// some-module.d.ts
export {}; // 这行确保 TypeScript 把这个文件当作一个模块处理declare global {interface Window {myCustomProperty: string;}
}// 现在,你可以在任何地方安全地使用 window.myCustomProperty
这里,export {}
是必须的,因为它将文件转化为一个模块。在没有任何导入或导出的文件中使用 declare global
是不允许的。
添加新的全局变量
如果你需要在全局作用域中声明新的变量(例如,一个全局函数或对象),可以这样做:
// globals.d.ts
export {}; // 使文件成为模块declare global {function globalFunction(): void;var globalVar: number;
}// 现在,globalFunction 和 globalVar 可以在任何地方使用
注意事项
- 模块化:确保你的声明文件是一个模块(通过添加
export {}
)。 - 冲突:小心不要创建与现有全局类型冲突的声明。
- 使用场合:通常只在必要时才在全局作用域中添加类型。过度使用全局变量或类型可能导致代码难以维护和理解。
- 项目配置:确保你的 TypeScript 配置文件 (
tsconfig.json
) 包含了这些声明文件。
通过使用 declare global
,你可以确保 TypeScript 知道你的全局扩展,从而在整个项目中安全地使用这些全局类型和变量。这对于大型应用和库的开发尤其重要,因为它们可能需要在多个文件或模块之间共享类型信息。