龙空技术网

如何解决 TypeScript 报错“无法重新声明块范围变量”的问题

dirac 100

前言:

现在咱们对“编译出错一直没有定义”大约比较讲究,兄弟们都需要学习一些“编译出错一直没有定义”的相关文章。那么小编也在网上收集了一些有关“编译出错一直没有定义””的相关知识,希望我们能喜欢,同学们快快来学习一下吧!

报错信息

当使用 TypeScript + TSlint + Babel 搭建开发环境时,在开发过程中偶尔会被 IDE 提示“无法重新声明块范围变量”,从而导致编译出错,报错图示如下:

无法重新声明块范围变量

解决方案

之所以 tslint 会提示这个错误,是因为在 Commonjs 规范中并没有像 ESModule 能形成闭包的“模块”概念,所有模块在引用时都默认被抛至全局,因此当再次声明某个模块时,TypeScript 会认为重复声明了两次相同的变量进而抛错。

对于这个问题,最简单的解决方法是在报错文件底部添加一行代码:export {}。这行代码会“欺骗”tslint ,使其认为当前文件是一个 ESModule 模块,因此不存在变量重复声明的可能性。当使用这个方法时,还要记得通过执行tsc --init命令生成配置文件 tsconfig.json ,并进行如下设置:

{	"include": ["src", "demo"],	"compilerOptions": {		"module": "commonjs",		"noImplicitReturns": true,		"noUnusedLocals": true,		"esModuleInterop": true, // important!		"target": "esnext",		"strict": true,		"outDir": "app",		"declaration": true,		"sourceMap": true	}}

其中 esMoudleInterop 这个配置允许文件中出现 export 关键字。

标签: #编译出错一直没有定义