跳至內容
文件
從 Tsc 遷移

從 tsc 遷移

如果您從 TypeScript 編譯器 (tsc) 遷移,有幾件事需要記住。

TypeScript 版本

SWC 支援最新的穩定 TypeScript。

isolatedModules: true

SWC 以逐檔案方式運作,因此任何需要了解完整類型系統的程式碼轉換都無法運作。

如果您遇到這些限制,某些 TypeScript 功能(例如 const 列舉和命名空間)可能會導致執行時期問題。

在這種情況下,使用 TypeScript 中的 isolatedModules(在新分頁中開啟) 標記可以協助您警告任何 SWC 可能無法正確解釋的程式碼。

請參閱 相關問題的留言(在新分頁中開啟) 以取得更多詳細資訊。

importsNotUsedAsValues: "error"

由於上述原因,SWC 無法完全辨別匯入繫結是 還是 類型

將此 importsNotUsedAsValues(在新分頁中開啟) 選項設定為 error 將確保 TypeScript 在類型檢查期間正確標記所有類型匯入為 類型,從而準確地將它們移除 SWC。

esModuleInterop: true

TypeScript 的匯入互通性偏離了 ES6 模組規格。

另一方面,SWC 採用類似於 Babel(有時可能更嚴格)的方法。

啟用這個 esModuleInterop(在新分頁中開啟) 選項可確保 tsc 的行為與 SWC 保持一致。

verbatimModuleSyntax: true

這是 TypeScript 5.0 中引入的新選項,用於取代 isolatedModulespreserveValueImportsimportsNotUsedAsValues。請查看 版本說明(在新分頁中開啟) 以取得更多詳細資訊。

useDefineForClassFields

此問題涉及 [[Define]][[Set]] 的語意。

誰不需要注意這一點?

  • 從不使用類別的人。
  • 使用類別但從不使用繼承的人。

誰需要特別注意這件事?

  • 裝飾器使用者。

如果值已經在您的 tsconfig.json 中設定,那麼相同的數值可以在 swc 的組態中使用。

如果它尚未設定,而您遇到問題,那麼您有必要補充這個設定。

請注意,這個選項的預設值會根據您的 tsconfig.jsontarget 而改變。

請查看 useDefineForClassFields(在新分頁中開啟) 選項。

如果 target 是 ES2022 或更高,包括 ESNext,則為 true,否則為 false。

已知問題

注意事項

SWC 只會轉譯程式碼,不會執行類型檢查。因此,建議您繼續使用 tsc 來偵測任何類型錯誤。