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

Jest无法解析@some-types作用域类型路径问题求助

解决Jest无法解析@some-types类型模块的问题

问题分析

代码编译正常但Jest测试时ModuleA显示为undefined,核心原因集中在以下几点:

  • Jest/ts-jest对纯类型模块(.d.ts)的解析逻辑与TS编译器不同,纯类型导出在运行时会被剥离,导致模块为空
  • 指定的tsconfig.test.json未同步@some-types的路径配置
  • ES模块模式下moduleNameMapper的匹配规则存在偏差

解决方案

1. 同步测试用TS配置的paths

打开tsconfig.test.json,添加和主tsconfig.json一致的paths配置:

"paths": {
  "@some-types": ["src/types/index.d.ts"]
}

2. 调整moduleNameMapper规则

修改匹配规则以兼容可能的子路径导出,同时确保路径指向正确:

moduleNameMapper: {
  // ...其他规则
  '^@some-types(.*)$': '<rootDir>/src/types$1',
}

如果你的类型模块只有根导出,也可以保留原规则,但需确认<rootDir>指向jest配置文件所在目录。

3. 使用类型导入语法

在测试文件中,对纯类型的导入使用import type,避免Jest在运行时尝试解析非类型导出:

import type { ModuleA } from "@some-types";

4. 优化ts-jest的类型处理配置

在jest.config.ts的ts-jest配置中添加isolatedModules: true,确保类型文件被正确识别:

globals: {
  "ts-jest": {
    babelConfig: true,
    useESM: true,
    tsconfig: "tsconfig.test.json",
    isolatedModules: true
  }
},

5. 检查类型模块的导出规范

确保ModuleA的命名空间导出符合TS规范:

// ModuleA.d.ts
export namespace ModuleA {
  export type SomeType = { /* ... */ };
}

同时在index.d.ts中保持正确导出:

export { ModuleA } from "./ModuleA";

内容的提问来源于stack exchange,提问作者andrey.shedko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:45:17