検索
ニュース

TypeScript 5.5正式版公開 正規表現の構文チェックなど新機能追加パフォーマンスを最適化するための機能追加も

Microsoftは「TypeScript 5.5」の正式版を公開した。本記事では、「新しいECMAScript Setメソッドのサポート」「正規表現の構文チェック」などのβ版以降に追加された新機能について取り上げる。

Share
Tweet
LINE
Hatena

 Microsoftは2024年6月20日(米国時間)、オープンソースのプログラミング言語の最新版「TypeScript 5.5」の正式版を公開した。

β版以降の新機能

 ECMAScriptの新しいSetメソッドのサポートを追加した。さらに、TypeScriptの新しい正規表現チェックの動作を調整した。ECMAScriptのAnnex Bでしか許可されていない、疑問の余地があるようなエスケープについては引き続きエラーが表示される。

 また、パフォーマンスを最適化するための機能が追加、ドキュメント化された。中でも、「transpileModule」における型チェックのスキップと、TypeScriptのContext型フィルタリングの最適化が主な変更点だ。これらの最適化により、多くの一般的なシナリオでビルド時間や編集、コンパイル、実行の反復時間が高速化されるという。

新しいECMAScript Setメソッドのサポート

 TypeScript 5.5は、ECMAScriptのSet型に対する新しい提案メソッドを宣言する。

 これらのメソッドの幾つか、例えば「union」「intersection」「difference」および「symmetricDifference」は、別のSetを受け取り、新しいSetを結果として返す。その他のメソッドである「isSubsetOf」「isSupersetOf」および「isDisjointFrom」は、別のSetを受け取り、booleanを返す。これらのメソッドは元のSetを変更しない。

正規表現の構文チェック

 これまでTypeScriptは、コード内のほとんどの正規表現をスキップしてきた。正規表現は技術的に拡張可能な文法を持っているため、TypeScriptは正規表現をJavaScriptの以前のバージョンにコンパイルしなかった。これにより、多くの一般的な問題が正規表現内で発見されず、実行時にエラーになるか、失敗するかしていた。

 しかし、TypeScript 5.5では正規表現に対して基礎的な構文をチェックするようになった。


(提供:Microsoft)

 このチェックによって多くの一般的なミスを発見することができる。例えば、TypeScriptには存在しない後方参照に関する問題を検出できるようになった。


(提供:Microsoft)

 名前付きキャプチャーグループにも同じことが当てはまる。


(提供:Microsoft)

 TypeScriptのチェックは、ターゲットのECMAScriptのバージョンよりも新しいRegExpが使用されている場合にも対応するようになった。例えば、上記のように名前付きキャプチャーグループをES5ターゲットで使用すると、エラーが発生する。


(提供:Microsoft)

 特定の正規表現フラグについても同様だ。

 TypeScriptの正規表現サポートは、正規表現リテラルに限定されている。文字列リテラルを使用してnew RegExpを呼び出そうとすると、TypeScriptは提供された文字列をチェックしない。

transpileModuleとtranspileDeclarationにおけるチェックの省略

 TypeScriptのAPI、transpileModuleは、単一のTypeScriptファイルの内容をJavaScriptにコンパイルするために利用できる。同様に、「transpileDeclaration」APIは単一のTypeScriptファイルの宣言ファイルを生成するために利用できる。これらのAPIの問題点の一つは、TypeScriptが出力する前に、内部的にファイルの内容全体に対して完全な型チェックを実行することだという。これは、後にemitフェーズで使用される特定の情報を収集するために必要なものだった。

 TypeScript 5.5では、完全なチェックをせずに必要に応じてこの情報を遅延的に収集する方法が実装された。「TranspileModule」と「transpileDeclaration」の両方がこの機能をデフォルトで有効にしている。その結果、「ts-loader」の「transpileOnly」や「ts-jest」など、これらのAPIと統合されたツールでの速度が向上するという。テストでは、「transpileModule」を使用することで、一般的なビルド時間が約2倍高速化することが確認されている。

識別子を持つUnionからContext型をキャッシュする

 TypeScriptがオブジェクトリテラルのような式のContext型を求めるとき、Union型に遭遇することが多い。その場合、TypeScriptは既知のプロパティと既知の値(識別プロパティ)に基づいてUnionのメンバーをフィルタリングしようとする。この作業にはかなりコストがかかる場合があり、特に多くのプロパティで構成されるオブジェクトで顕著だという。TypeScript 5.5では、この計算の多くを一度キャッシュすることで、オブジェクトリテラルの各プロパティに対して再計算する必要がないよう修正された。この最適化を行うことで、TypeScriptコンパイラ自体のコンパイル時間が250ms短縮されるという。

ECMAScriptモジュールからのAPIの利用が容易に

 以前は、Node.jsでECMAScriptモジュールを記述している場合、「typescript」パッケージから名前付きインポートを使用することができなかった。


(提供:Microsoft)

 この問題は、TypeScriptが生成するCommonJSコードのパターンを、「cjs-module-lexer」が認識しないことによって発生していた。本バージョンではこれが修正され、ユーザーはNode.jsのECMAScriptモジュールでtypescript npmパッケージから名前付きインポートを使用できるようになった。


(提供:Microsoft)

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る