![](/img/trans.png)
[英]How to use Existing typescript namespaced classes as external modules for nodejs
[英]How to force all files to be treated as modules when converting an existing NodeJS project to TypeScript
我是 TypeScript 的新手,正在研究將一個大型的、現有的符合 ES2017 的 NodeJS 代碼庫遷移到它。
這是我的tsconfig.json
的樣子:
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"outDir": "./built",
"allowJs": true,
"target": "ES2017",
},
"include": [
"**/*"
],
"exclude": [
"**/node_modules/**/*",
"built"
]
}
如果我將所有.js
文件重命名為具有.ts
擴展名,我會遇到此問題並從tsc
看到很多Cannot redeclare block-scoped variable
錯誤,因為 TypeScript 似乎無法判斷我的文件是否是模塊(每個文件都有自己的范圍) 或腳本(都共享一個范圍)。
這些“虛擬”/死記硬背的錯誤使我無法看到其他真正的錯誤,這些錯誤需要作為 TypeScript 遷移的一部分進行修復。
所以,我的問題是,作為將現有 JavaScript 代碼庫遷移到 TypeScript 的一部分,解決此問題的最明智和正確的方法是什么?
我想到了兩個選擇:
啟用allowJs
並慢慢將每個.js
文件一次一個地重命名為.ts
,在重命名每個文件時調整每個文件的imports
/ exports
,以向 TypeScript 表明該文件是一個模塊並且不會與其他文件沖突.ts
文件。 (現有的.js
文件將不受影響地復制過來。)
將所有.js
文件重命名為.ts
並放置一個固定export {};
在每個文件中作為起點。 這似乎並不理想。
這些選項似乎都不理想。 有沒有更直接的方法告訴tsc
將所有文件視為模塊以防止它認為它們將共享相同的 scope?
從 TypeScript 4.7 開始,這是通過 tsconfig.json 中的"moduleDetection": "force"
解決的:
{
"compilerOptions": {
// ... Various options here, such as module ...
"moduleDetection": "force"
}
}
參考: https://www.typescriptlang.org/tsconfig#moduleDetection
驅動此配置的原始 Github 問題: https://github.com/microsoft/TypeScript/issues/14279
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.