3ヶ月前にTypeScript5.0 Betaを発表した後、TypeScript 5はついにGA公開となった。主な変更点としては、デコレータ機能のサポートが拡張されたこと、export
やexport defaults
の前後に配置できるようになったこと、新しいbundler
モジュール解決オプションがあげられる。
InfoQではTypeScript 5のベータ版が発表された後TypeScript 5がもたらす主要な新機能を簡単に紹介している。中でも特に目玉機能はデコレータ機能で、クラスやそのメンバを装飾してより簡単に再利用できるようになった。例えばloggedMethod
デコレータを作成して、既存の関数にロギング動作を追加できる。デコレータは高次関数の定義を簡略化するための構文上の繋ぎ手に過ぎない点もポイントだ。
デコレータの定義が export
と export defaults
の前後に配置できるようになったのは、基本的に ECMAScript/JavaScript の将来のリリースとの互換性のための要件であることが述べられている。
TypeScript 5では、Vite、esbuild、swc、Webpack、Parcelなどの最新のバンドラーとの共存を改善するために、--moduleResolution bundler
という新しいbundler
モジュールオプションが導入された。TypeScript 5 GAでは、このオプションはesnext
モジュールでのみ使用できるようになっている。
これは、バンドラーやローダーがTypeScriptのモジュールオプションを優先するか否かに関わらず、入力ファイルに書かれたインポート文をバンドラーが解決する前にrequire呼び出しに変換されないようにするためのものだ。
古い bundler
オプションは npm
を通して配布されるパッケージに適している。
TypeScript 5.0はメジャーバージョン5となったが、セマンティックバージョニングを採用していないTypeScriptでは、バージョン4.9から5.0への移行とバージョン4.8から4.9の移行で、質的な違いはない、とのことである。
一方でTypeScript 5では、enum
型の全面的な見直しのような、既存のコードを壊す可能性のあるbreaking changes and deprecationsが導入されている。