我是TypeScript的新手,正在研究如何将现有的大型ES 2017兼容NodeJS代码库迁移到TypeScript。
下面是我的tsconfig.json
的外观:
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"outDir": "./built",
"allowJs": true,
"target": "ES2017",
},
"include": [
"**/*"
],
"exclude": [
"**/node_modules/**/*",
"built"
]
}
如果我将所有.js
文件重命名为.ts
扩展名,我会遇到this issue,并看到许多来自tsc
的Cannot redeclare block-scoped variable
错误,因为TypeScript似乎无法区分我的文件是模块(每个都有自己的作用域)还是脚本(都共享一个作用域)。
这些“虚拟”/死记硬背的错误使我看不到其他真正的错误,这些错误需要作为TypeScript迁移的一部分进行修复。
因此,我的问题是,作为将现有JavaScript代码库迁移到TypeScript的一部分,解决这个问题的最明智和正确的方法是什么?
我想到了两个选择:
1.保持allowJs
处于启用状态,慢慢地将每个.js
文件重命名为.ts
(一次一个),在重命名每个文件时调整每个文件的imports
/exports
,以向TypeScript表明该文件是一个模块,不会与其他.ts
文件冲突(现有的.js
文件将不受影响地复制过来)。
1.将所有.js
文件重命名为.ts
,并在每个文件中放入一个固定的export {};
作为起点,这似乎并不理想。
这两个选项似乎都不理想,有没有更直接的方法告诉tsc
将所有文件都视为模块,以防止它认为这些文件将共享相同的作用域?
1条答案
按热度按时间pbossiut1#
从TypeScript 4.7开始,这个问题可以通过tsconfig.json中的
"moduleDetection": "force"
解决:Reference: https://www.typescriptlang.org/tsconfig#moduleDetection
导致此配置的原始Github问题:https://github.com/microsoft/TypeScript/issues/14279