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

TypeScript中如何将Jest全局类型限定作用于特定文件

@types/jest 作用域限制与非全局导入配置方案

让@types/jest仅对.jest.ts后缀文件生效

TypeScript 默认会自动加载 node_modules/@types/ 下所有包的类型到全局,这是安装@types/jest后所有.ts文件都能识别Jest全局变量的核心原因,可以通过以下两种方式调整生效范围:

  • 方案一(推荐):拆分TS配置,区分业务代码与测试代码
    1. 修改项目根目录给业务源码使用的tsconfig.json,显式指定业务侧需要的全局类型,排除Jest,同时排除测试文件的匹配范围:
      {
        "compilerOptions": {
          // 其余业务配置保持不变
          "types": ["node"] // 仅填写业务代码需要的全局类型,不要加入jest
        },
        "include": ["src/**/*.ts"],
        "exclude": ["src/**/*.jest.ts"]
      }
      
    2. 新建测试专用的tsconfig.test.json,继承基础配置,单独给测试文件引入Jest类型:
      {
        "extends": "./tsconfig.json",
        "compilerOptions": {
          "types": ["node", "jest"] // 仅测试环境加载jest类型
        },
        "include": ["src/**/*.jest.ts"]
      }
      
    配置完成后VS Code的TS服务会自动识别两类文件的类型范围,业务.ts文件不会再提示Jest全局变量存在。如果使用ts-jest跑测试,记得在jest配置里指定ts-jest读取测试专用的tsconfig,避免运行时报错:
    // jest.config.js
    module.exports = {
      transform: {
        '^.+\\.tsx?$': ['ts-jest', {
          tsconfig: './tsconfig.test.json'
        }]
      }
    }
    
  • 方案二:测试文件手动引入类型引用
    如果不想维护多份TS配置,可以直接在基础tsconfig.json的types数组中排除jest,之后在每一个.jest.ts测试文件顶部添加三斜线指令,手动引入Jest类型:
    /// <reference types="jest" />
    // 后续编写测试逻辑
    
    这种方式不需要拆分配置,但每个测试文件都要手动加一行引用,适合测试文件规模较小的项目。

配置为必须通过import导入Jest函数,不使用全局变量

完全可以实现,配置步骤如下:

  1. 安装Jest官方提供的模块化导入包:
    npm i -D @jest/globals
    
  2. 在测试专用的TS配置中,不要把jest加入compilerOptions.types数组,避免全局注入Jest类型。
  3. 在Jest配置文件中关闭全局变量注入,从运行时层面禁用全局API:
    // jest.config.js
    module.exports = {
      // 其余配置保持不变
      injectGlobals: false
    }
    
  4. 之后所有测试文件里用到Jest方法都必须显式导入,TS会对未导入的用法直接报错:
    import { describe, test, expect, beforeEach, afterAll } from '@jest/globals';
    
    test('1+1计算结果正确', () => {
      expect(1 + 1).toBe(2);
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 00:24:21