コンテンツへスキップ
ドキュメント
tsc からの移行

tsc からの移行

TypeScript コンパイラ (tsc) から移行する場合、いくつか考慮すべき点があります。

TypeScript のバージョン

SWC は最新の安定版 TypeScript をサポートしています。

isolatedModules: true

SWC はファイル単位で動作するため、完全な型システムの理解に依存するコード変換は機能しません。

これらの制限に遭遇した場合、定数列挙型や名前空間などの特定の TypeScript 機能が実行時問題を引き起こす可能性があります。

この場合、TypeScript のisolatedModules (新しいタブで開きます) フラグを使用すると、SWC によって正しく解釈されない可能性のあるコードについて警告を表示できます。

詳細については、関連するissueのコメント (新しいタブで開きます) を参照してください。

importsNotUsedAsValues: "error"

前述の理由により、SWC はインポートされたバインディングがであるかであるかを完全に区別できません。

このimportsNotUsedAsValues (新しいタブで開きます) オプションをerror に設定すると、TypeScript は型チェック中にすべての型インポートをとして正しくマークし、SWC で正確に削除されます。

esModuleInterop: true

TypeScript のインポート相互運用性は、ES6 モジュール仕様とは異なります。

一方、SWC は Babel と同様のアプローチを採用しています(場合によってはより厳格です)。

このesModuleInterop (新しいタブで開きます) オプションを有効にすると、tsc の動作が SWC の動作と一致するようになります。

verbatimModuleSyntax: true

これは、TypeScript 5.0 で導入された新しいオプションで、isolatedModulespreserveValueImports、およびimportsNotUsedAsValues を置き換えるものです。リリースノート (新しいタブで開きます) を参照して詳細を確認してください。

useDefineForClassFields

これは[[Define]][[Set]] のセマンティクスに関する問題です。

誰が気にしなくても良いのか?

  • クラスをまったく使用しない人。
  • クラスを使用するが、継承をまったく使用しない人。

この点に特に注意が必要な人?

  • デコレーターを使用している人。

値が既にtsconfig.json で設定されている場合は、同じ値を swc の設定で使用できます。

設定されておらず、問題が発生した場合は、この設定を追加する必要があります。

このオプションのデフォルト値は、tsconfig.jsontarget によって変化することに注意してください。

useDefineForClassFields (新しいタブで開きます) オプションを確認してください。

target が ES2022 以降(ESNext を含む)の場合は true、それ以外の場合は false。

既知の問題

  • TypeScript#16166 (新しいタブで開きます) ES6 インポートは tsc によってホイスティングされません。誤った tsc 実装に依存している場合、swc は ES モジュールのセマンティクスをより厳密に保持するため、swc への移行時に問題が発生する可能性があります。

備考

SWC はコードをトランスパイルするだけで、型チェックは実行しません。したがって、型エラーの検出には tsc を引き続き使用することをお勧めします。