已配置ES2022仍遇ts-jest顶级await错误,求解决方法
解决Jest测试中TS1378顶级await报错问题
核心问题
Jest默认可能未正确读取server/tsconfig.json的配置,或未适配ES模块模式,导致即便你已设置target和module为ES2022,依然触发顶级await的TS1378错误。
具体解决方案
1. 让Jest明确使用指定的tsconfig
在Jest配置文件(jest.config.js或jest.config.ts)中,通过ts-jest的配置项直接指向server/tsconfig.json,确保测试编译规则与业务代码一致:
module.exports = { preset: 'ts-jest', testEnvironment: 'node', transform: { '^.+\\.tsx?$': ['ts-jest', { tsconfig: 'server/tsconfig.json' // 显式指定tsconfig路径 }] } };
2. 配置Jest支持ES模块
由于你使用了module: ES2022,需要调整Jest适配ES模块模式(默认是CommonJS):
module.exports = { preset: 'ts-jest/presets/default-esm', // 启用ESM预设 testEnvironment: 'node', extensionsToTreatAsEsm: ['.ts'], // 将.ts文件识别为ES模块 moduleNameMapper: { '^(\\.{1,2}/.*)\\.js$': '$1' // 处理ES模块导入时的.js后缀问题 }, transform: { '^.+\\.tsx?$': ['ts-jest', { useESM: true, tsconfig: 'server/tsconfig.json' }] } };
3. 检查Node.js版本兼容性
顶级await需要Node.js 14.8.0及以上版本,建议使用Node.js 18+ LTS版本,避免版本不足导致的隐性问题。
4. 完善tsconfig的模块解析配置
确保server/tsconfig.json中moduleResolution与module配置匹配,避免规则冲突:
{ "compilerOptions": { "target": "ES2022", "module": "ES2022", "moduleResolution": "NodeNext", // 或Node16,适配ES模块 "esModuleInterop": true, "strict": true, "outDir": "./dist" } }
验证
完成以上配置后,重新运行Jest测试,TS1378错误应被解决,无需重构代码中的顶级await语句。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

