Microsoftは「TypeScript 5.0」を公開した。TypeScriptのスリム化、簡素化、高速化を目標に開発されており、多くの新機能を提供する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Microsoftは2023年3月16日(米国時間、以下同)、オープンソースのプログラミング言語の最新版「TypeScript 5.0」を公開したと発表した。
TypeScriptは静的型付けができる言語であり、JavaScriptのスーパーセットだ。ECMA規格に従った最新のJavaScriptの機能を、古いWebブラウザやランタイムが扱えるようにコンパイルもできる。
TypeScript 5.0は、TypeScriptのスリム化、簡素化、高速化を目標に開発されており、多くの新機能を提供する。例えば、新しいデコレータ規格の実装、Node.jsやバンドラでのESMプロジェクトのサポート強化、ライブラリ作者がジェネリック推論を制御する新しい方法の提供、JSDoc機能の拡張、構成の簡素化といった改善が施されている。
TypeScript 5.0は、NuGetを使うか、次のコマンドラインのように、npmを使ってインストールできる。
TypeScript 5.0は「Visual Studio 2022」と「Visual Studio 2019」のエディタでサポートされており、「Visual Studio Code」(以下、VS Code)でも利用できる。
TypeScript 5.0におけるβ版からの主な変更点は、以下の通り。
TypeScript 5.0におけるRelease Candidate(RC:リリース候補)からの最も注目すべき変更点としては、package.jsonでNode.jsの最小バージョンを12.20と指定するようになったことが挙げられる。
TypeScript 5.0の主な新機能は次の通り。
TypeScript 5.0では、ECMAScriptに追加予定の機能であるデコレータにより、クラスとそのメンバーを再利用可能な方法でカスタマイズできる。
TypeScriptは以前から「実験的な」デコレータをサポートしている。実験的なデコレータは非常に便利だった一方で、デコレータに関するかなり古いバージョンの提案をモデルにしており、常に「--experimentalDecorators」というコンパイラフラグが必要だった。
このフラグがなければ、既存のデコレータは全ての新しいコードで有効な構文になる。だが、新しいデコレータでは、既存デコレータとは型チェックのルールとemitが異なるため、既存のデコレータ関数は、新しいデコレータの挙動に対応しないだろうとみられている。
TypeScript 5.0では、型パラメーターの宣言に「const」修飾子を追加することで、constのような推論を既定にできる。
なお、const修飾子は、ミュータブルな値を拒否せず、イミュータブルな制約も要求しない。
複数のプロジェクトを管理する場合、他のtsconfig.jsonファイルが拡張できる「基本」構成ファイルがあると便利なことがある。そこでTypeScriptは、「compilerOptions」からフィールドをコピーするための「extends」フィールドをサポートしている。
TypeScript 5.0では、extendsフィールドに複数のエントリを指定できるようになった。以下に示す構成ファイルの場合、cを直接拡張するものといえる(cはbを拡張し、bはaを拡張)。
いずれかのフィールドが「衝突」する場合、より後のエントリが優先される。
TypeScript 5.0では、計算されるメンバーごとに固有の型を作成することで、全てのenumをユニオンenumにできる。つまり、全てのenumを絞り込み、そのメンバーを型として参照可能だ。
TypeScript 5.0では、バンドラの仕組みをモデル化するために、「--moduleResolution bundler」が導入されている。
「Vite」「esbuild」「swc」「Webpack」「Parcel」など、ハイブリッドルックアップ戦略を実装したモダンなバンドラを使っている場合、新しいbundlerオプションは有用だろう。
JavaScriptツールは、上で説明したbundlerモードのような「ハイブリッド」解決ルールをモデル化できる。ツールによってサポートの仕方が若干異なるため、TypeScript 5.0では、自分の構成に対応するかどうかに応じて幾つかの機能を有効にしたり、無効にしたりする方法が用意されている。
TypeScript 5.0では、「--verbatimModuleSyntax」という新しいオプションが導入され、「type」修飾子を持たないインポートやエクスポートはそのまま残され、type修飾子を使用するものは完全に削除されるようになった。
--verbatimModuleSyntaxは、「--importsNotUsedAsValues」や「--preserveValueImports」よりも一貫性が高いため、この2つの既存のフラグは非推奨となり、--verbatimModuleSyntaxが優先されることになった。
TypeScript 3.8で型のみのインポートが導入されたとき、新しい構文は、「export * from "module"」や「export * as ns from "module"」の再エクスポートでは許可されていなかった。TypeScript 5.0では、この両方の形式がサポートされるようになった。
多くの人がTypeScriptを使って、JSDocアノテーションを用いるJavaScriptコードの型チェックを行っている。そのためにTypeScript 5.0では、全く同じことを行う「@satisfies」という新しいJSDocタグがサポートされている。
TypeScript 5.0では、JSDocで新しい「@overload」タグを使ってオーバーロードを宣言できるようになった。各JSDocコメントに@overloadタグを付けると、それらに続く関数宣言に対して個別のオーバーロードとして扱われる。
TypeScript 5.0では、「--build」モードで次のフラグを渡せる。
これにより、開発ビルドと本番ビルドが異なる場合に、ビルドの特定の部分をより容易にカスタマイズできる。
Visual StudioやVS Codeなどのエディタでは、TypeScriptがインポートやエクスポートを整理したりソートしたりする機能を提供している。だが、リストが「ソート」されるタイミングについては、解釈が異なることがよくある。
大文字/小文字を区別するかどうかによって、インポートリストが既にソートされているかどうかの認識が違ってくるからだ。
TypeScript 5.0では、既定で大文字/小文字を区別するようになり、「ESLint」のようなツールと、インポートの最適なソート方法について衝突することがなくなった。
switch文を書くとき、TypeScript 5.0は、チェック対象の値がリテラル型を持つかどうかを検出する。リテラル型を持つ場合は、カバーされない各caseを補完する。
TypeScript 5.0では、コード構造、データ構造、アルゴリズムの実装にわたって多くの強力な変更が施されている。これにより、TypeScriptの実行が高速化し、インストール時間も短縮されている。
TypeScript 5.0では、以下をはじめとする幾つかの破壊的変更が行われている。
TypeScriptは、ECMAScript 2018をターゲットとするようになった。またTypeScriptパッケージでは、12.20以降のエンジンを期待するようになった。Node.jsユーザーにとっては、TypeScript 5.0の最小バージョン要件はNode.js 12.20以降となる。
DOMの型の生成方法の変更が、既存コードに影響を与える可能性がある。特に、特定のプロパティが数値から数値リテラル型に変換され、切り抜き、コピー、貼り付けのイベント処理用のプロパティとメソッドが、インタフェースを越えて移動した。
TypeScript 5.0では、モジュールへの移行、不要なインタフェースの削除、正確性の改善などが行われた。
Copyright © ITmedia, Inc. All Rights Reserved.