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

TypeScript忽略esModuleInterop,CommonJS项目无法引入lowdb如何解决?

解决步骤

1. 确认tsconfig.json核心配置有效性

确保你的tsconfig.json关键配置正确,且未被其他配置文件覆盖:

{
  "compilerOptions": {
    "target": "ES2020", // 选兼容的较高版本即可
    "module": "CommonJS", // 明确指定编译目标为CommonJS
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "moduleResolution": "NodeNext" // 提升ESM与CommonJS混合场景的解析兼容性
  }
}

注意:如果项目存在多份tsconfig(如tsconfig.node.json),要检查这些文件是否继承了主配置,或是单独将esModuleInterop设为了false。

2. 适配lowdb的ESM特性

lowdb从v3版本开始是纯ESM模块,即使开启esModuleInterop,直接默认导入仍可能在CommonJS环境报错,可改用以下两种导入方式:

  • 命名导入(推荐):
import { Low } from 'lowdb'
import { JSONFile } from 'lowdb/node'
  • 动态导入(适合CommonJS环境调用ESM模块):
async function initDatabase() {
  const { Low, JSONFile } = await import('lowdb')
  const adapter = new JSONFile('db.json')
  const db = new Low(adapter)
  await db.read()
  // 后续数据库操作
}

3. 验证TS配置是否被正确读取

若编译后的js文件未生成__importDefault辅助函数,大概率是TS没读取到你的配置:

  • 编译时显式指定配置文件:tsc --project tsconfig.json
  • 确认tsconfig.json在项目根目录,避免放在子目录导致TS自动识别失败

4. 调整package.json的模块类型

如果你的package.json设置了"type": "module",会强制项目使用ESM,与编译为CommonJS的需求冲突。确保:

{
  "type": "commonjs" // 或直接删除该字段,默认即为commonjs
}

5. 更新TypeScript版本

旧版TS对esModuleInterop的处理可能存在bug,建议更新至最新稳定版:

npm install typescript@latest --save-dev

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:37:08