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

ts-node转译TypeORM的createConnection为(0, typeorm_1.createConnection)报错如何解决

解决方案

步骤1:调整全局setup文件的模块语法

Jest的globalSetup默认以CommonJS规范加载文件,你当前混用了CommonJS的require和ES模块的顶层import,会导致ts-node/register还未完成注册,TS代码就已经被解析,触发转译错误。修改全局setup文件代码如下:

// 必须放在文件第一行,优先完成ts-node注册
require('ts-node/register');

// 所有依赖改用require导入,不要使用顶层import语法
const { Connection } = require('typeorm');
const { 
  closeTestingConnection, 
  createTestingConnection, 
  dropTestingDatabases, 
  runMigrationsOnDatabase 
} = require('./utils/util');

/**
 * 所有测试用例执行前创建数据库连接
 */
const globalSetup = async () => {
  let testConnection: Connection | undefined;
  try {
    testConnection = await createTestingConnection();
    await runMigrationsOnDatabase(testConnection);
  } catch (error) {
    if(testConnection) {
      await dropTestingDatabases(testConnection);
      await closeTestingConnection(testConnection);
    }
    throw error;
  }
}

// 改用CommonJS导出规则,不要使用export default
module.exports = globalSetup;

步骤2:修正tsconfig配置适配转译规则

你看到的(0, typeorm_1.createConnection)是TypeScript的正常转译结果,不属于错误,报错本质是ts-node的配置和项目不匹配。在项目根目录的tsconfig.json中确认以下配置项:

{
  "compilerOptions": {
    "esModuleInterop": true,
    "module": "CommonJS",
    "target": "ES2016",
    "moduleResolution": "Node",
    "allowSyntheticDefaultImports": true
  },
  "ts-node": {
    "transpileOnly": true // 可选配置,跳过类型检查提升执行速度
  }
}

步骤3:修复数据库配置加载逻辑

你当前getDBConfig函数直接加载.ts后缀的ORM配置文件,需要确保ts-node注册完成后才调用该函数。同时可以在require配置文件前打印文件的绝对路径,核对路径是否正确,避免找不到配置文件的错误。如果路径校验正常但仍无法加载,可以将ORM配置改为.js或.json格式,规避TS文件加载问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:57:03