TypeScript 中 declare global 关键字用法详解

作者:青柠

时间:2026-10-31

浏览:457

本文详解 TypeScript 中 declare global 关键字的用法。该关键字用于在包含 import 或 export 的模块内扩展全局作用域,常见场景包括扩展 window 接口或添加全局变量。需注意必须通过 export {} 将文件转化为模块,并避免与现有类型冲突,确保 tsconfig.json 包含声明文件以保障类型安全。

文章目录

在 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 知道你的全局扩展,从而在整个项目中安全地使用这些全局类型和变量。这对于大型应用和库的开发尤其重要,因为它们可能需要在多个文件或模块之间共享类型信息。

到此这篇关于typescript中 declare global 关键字用法的文章就介绍到这了,更多相关typescript declare global 关键字内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章