我是TypeScript的新手,正在研究将现有的,符合ES2017的大型NodeJS代码库迁移到它的情况。
这是我的tsconfig.json
的样子:
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"outDir": "./built",
"allowJs": true,
"target": "ES2017",
},
"include": [
"**/*"
],
"exclude": [
"**/node_modules/**/*",
"built"
]
}
如果我将所有.js
文件重命名为具有.ts
扩展名,我会遇到this issue并从Cannot redeclare block-scoped variable
看到很多tsc
错误,因为TypeScript似乎无法判断我的文件是模块(每个都有自己的作用域)还是脚本(都共享一个作用域)。
这些“虚拟” /死记硬背错误使我看不到其他真正的错误,这些错误需要作为TypeScript迁移的一部分进行修复。
因此,我的问题是,作为将现有JavaScript代码库迁移到TypeScript的一部分,解决此问题的最明智和正确的方法是什么?
我想到了两个选择:
启用allowJs
并缓慢地将每个.js
文件一次重命名为.ts
,并在操作时调整每个文件的imports
/ exports
。重命名每个文件的时间,以向TypeScript指示该文件是模块,并且不会与其他.ts
文件冲突。 (现有的.js
文件将被复制而不受影响。)
将所有.js
文件重命名为.ts
,然后在每个文件中放入一个罐头export {};
作为起点。这似乎并不理想。
这些选项都不是理想的。是否有更直接的方法告诉tsc
将所有文件视为模块,以防止其认为它们将共享相同的作用域?