TS - dayjs 引入但失效问题
总结:
- 在 tsconfig.json 中配置
esModuleInterop: true
和allowSyntheticDefaultImports: 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'
)来引入这些模块