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
相关产品推荐
相关产品推荐

