← [ BACK_TO_NOTES ]

TypeScript 中的全局声明与全局扩展

说明 .d.ts、declare global、Window 扩展和模块扩展的边界,以及全局声明在 TypeScript 中的典型写法。

#dev #typescript #concept #growing

[!info] related notes

TypeScript 中的全局声明与全局扩展

一句话定义

全局声明与全局扩展用来告诉 TypeScript:某些名字虽然不是当前模块显式导出的,但它们确实会在全局环境中存在,或者需要在现有全局对象上补充类型信息。

核心机制 / 工作原理

全局声明

全局声明最常出现在 .d.ts 文件里,用来直接向全局作用域补充类型。

全局扩展

如果当前文件已经是模块(含 import / export),想修改全局类型,就要通过 declare global 进入全局作用域。

模块扩展

如果目标不是全局对象,而是某个已有模块的导出类型,就需要模块扩展,而不是全局扩展。

最小例子 / 最小场景

在 .d.ts 中补充 Window

interface Window {
  appConfig: {
    apiUrl: string;
  };
}

在模块文件中扩展全局

export {};

declare global {
  interface Window {
    appConfig: {
      apiUrl: string;
    };
  }
}

常见应用场景

  • 给 window 挂全局配置
  • 给第三方脚本注入的全局变量补类型
  • 给测试环境补充全局 helper 类型
  • 给 SSR 注入的首屏数据补类型

边界与易混淆点

Window 扩展只是其中一种场景

很多旧资料会把“全局声明”直接等同于“扩展 Window”,但这只是最常见案例,不是完整范围。

类型存在不代表运行时一定存在

全局声明只影响编译阶段。运行时如果没有真正挂上这个对象,代码依然会出错。

模块扩展不等于全局扩展

如果你在改的是某个库的模块类型,而不是浏览器或 Node 的全局对象,就应该用模块扩展的写法,而不是 declare global。

创建于 2025/1/1 更新于 2026/7/15
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本