TS - dayjs 引入但失效问题

Posted by CodingWithAlice on February 20, 2025

TS - dayjs 引入但失效问题

总结:

  • 在 tsconfig.json 中配置 esModuleInterop: trueallowSyntheticDefaultImports: true
  • esModuleInterop 处理 CommonJS 和 ES6 之间的交互问题,dayjs 是使用 CommonJS 的库
  • allowSyntheticDefaultImports 处理没有明确默认导出的模块
原因

dayjs 是一个使用 CommonJS 模块系统的库,当在 NestJS(基于 TypeScript 和 ES6 模块语法)项目中引入 dayjs 时,开启这两个配置可以确保能够使用 ES6 的 import 语法正确引入 dayjs,避免因模块系统不兼容而导致引入失效的问题

解决办法

​ 需要在 配置中 tsconfig.json

"esModuleInterop": true,  // 处理 CommonJS 模块和 ES6 模块之间的交互问题
"allowSyntheticDefaultImports": true // 允许在 TypeScript 代码里对没有默认导出的模块使用默认导入语法
  • esModuleInterop:TypeScript 会生成一些辅助代码来实现这两种模块系统之间的互操作性。它会确保在使用 ES6 的 import 语法引入 CommonJS 模块时,能够正确处理默认导出和命名导出
  • allowSyntheticDefaultImports:有些模块(尤其是一些老的 CommonJS 模块)并没有明确的默认导出,但我们可能希望使用 ES6 的默认导入语法(import someModule from 'module-name')来引入这些模块