问题描述
使用 Express + TS 开发项目,在两个不同的文件引入相同的依赖,红色波浪线
虽然程序可正常运行
其他问题
- 无法重新声明块范围变量
- 函数实现重复
- 标识符重复
问题原因
项目中使用 CommonJS 规范,进行模块间的导入导出操作
因为在 CommonJS 规范里,没有像 ESModule 能形成闭包的「模块」概念,所有的模块在引用时都默认被抛至全局,因此当再次声明某个模块时,TypeScript 会认为重复声明了两次相同的变量进而抛错。
解决方法
方法一
解决方法是在报错的文件底部添加一行代码 export {}
这行代码会 使其认为当前文件是一个 ESModule 模块,因此不存在变量重复声明的可能性。
当使用这个方法时,记得这样配置你的 tsconfig.json
文件:加上一行代码
"esModuleInterop": true 这个配置允许文件中出现 export
关键字。
{
"compilerOptions": {
"module": "commonjs",
"esModuleInterop": true,
"target": "es6",
"rootDir": "./src",
"outDir": "./build",
"strict": true
}
}
方法二
进行 TS 初始化,在项目的路径下, 打开终端运行以下命令, 进行 TS 初始化,生成 tsconfig.json 文件
tsc --init
文章如有错误,恳请大家提出问题,本人不胜感激 。 不懂的地方可以评论,我都会 一 一 回复
文章对大家有帮助的话,希望大家能动手点赞鼓励,大家未来一起努力 长路漫漫,道阻且长