You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅为单元测试文件声明TypeScript全局变量?

如何仅为单元测试文件扩展TypeScript全局变量

当然可以实现,核心思路是通过TypeScript配置的环境隔离,让测试专属的全局变量声明只在测试代码的编译流程中生效,不会影响生产环境代码。下面是两种可靠的实现方式:

方法一:测试目录专属类型声明

  1. 创建测试专属的类型声明文件
    在你的测试根目录(比如__tests__)下新建一个global.d.ts文件,写入全局变量声明:
declare global {
  var foo: Bar;
}

export {}; // 必须添加这一行,将文件标记为ES模块,否则无法正确扩展全局类型
  1. 配置测试专用的TypeScript配置文件
    新建tsconfig.test.json,继承主配置并指定测试相关文件的范围:
{
  "extends": "./tsconfig.json",
  "include": ["__tests__/**/*", "src/**/*.test.ts"], // 包含所有测试文件
  "exclude": [] // 覆盖主配置的排除规则,确保测试文件被正确编译
}
  1. 让测试框架使用该配置
    在Jest配置文件(比如jest.config.js)中指定使用测试专用的TS配置:
module.exports = {
  preset: 'ts-jest',
  globals: {
    'ts-jest': {
      tsconfig: 'tsconfig.test.json'
    }
  }
};
  1. 确保主配置排除测试文件
    在主tsconfig.json中添加排除规则,避免生产环境加载测试类型声明:
{
  "exclude": ["__tests__", "src/**/*.test.ts"]
}

方法二:通过文件扩展名精准匹配

如果你的测试文件都统一使用.test.ts后缀,可以直接在主TS配置中为这类文件单独指定类型声明:

  1. 在项目根目录下创建test-types文件夹,里面放global.d.ts(内容同方法一)
  2. 修改主tsconfig.json,针对测试文件单独配置类型包含:
{
  "include": ["src/**/*"],
  "exclude": ["src/**/*.test.ts"],
  "compilerOptions": {
    // 主配置选项
  },
  "files": [],
  "references": [
    {
      "path": "./tsconfig.test.json"
    }
  ]
}

然后tsconfig.test.json的配置和方法一一致,专门处理.test.ts文件的编译和类型加载。

这样设置后,只有测试文件能识别global.foo变量,生产环境代码中访问该变量会直接触发TypeScript类型错误,符合你的需求。

内容的提问来源于stack exchange,提问作者Lehks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 16:10:25