当使用 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 关键字。
留言与评论(共有 0 条评论) “” |