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

Jest无法解析TS项目中ESM本地.js导入的解决方法求助

解决ts-jest无法识别.js导入对应.ts文件的问题

在TypeScript项目中使用.js后缀导入.ts源文件(比如import * from "./b.js")是符合Node.js模块解析规范(尤其是node16/nodenext模块解析模式)的,TypeScript本身能正确识别,但ts-jest默认不会自动把.js导入映射到.ts文件,你可以通过以下几种方式解决:

方案1:使用moduleNameMapper做后缀映射

在你的jest配置文件(jest.config.js或jest.config.ts)中添加moduleNameMapper规则,将.js后缀的导入路径替换为.ts:

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  // 映射.js结尾的路径到对应的.ts文件
  moduleNameMapper: {
    '^(\\.\\/.+)\\.js$': '$1.ts'
  }
};

这个正则表达式会匹配所有相对路径的.js导入(比如./b.js),将其转换为./b.ts,让jest能找到对应的TypeScript源文件。

方案2:适配ESM模块项目(如果项目使用type: module)

如果你的项目在package.json中设置了"type": "module",需要使用ESM格式的jest配置,并调整相关参数:

export default {
  preset: 'ts-jest/presets/default-esm',
  testEnvironment: 'node',
  moduleNameMapper: {
    '^(\\.\\/.+)\\.js$': '$1.ts'
  },
  // 告知jest将.ts文件当作ESM处理
  extensionsToTreatAsEsm: ['.ts'],
  // 优先查找.ts文件
  moduleFileExtensions: ['ts', 'js']
};

额外注意事项

  • 确保你的tsconfig.json中moduleResolution设置为node16或nodenext(这也是你能使用.js导入.ts文件的前提);
  • 如果使用TypeScript的路径别名,需要在moduleNameMapper中同时配置别名规则,避免冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:22:12