検索
ニュース

Microsoft、プログラミング言語「TypeScript 5.4」β版を公開2024年2月下旬にリリース候補版、3月上旬に正式版を公開予定

Microsoftは、オープンソースのプログラミング言語の最新版「TypeScript 5.4」のβ版を公開した。

Share
Tweet
LINE
Hatena

 Microsoftは2024年1月29日(米国時間、以下同)、オープンソースのプログラミング言語の最新版「TypeScript 5.4」のβ版を公開した。TypeScriptは、静的型付けができる言語で、JavaScriptのスーパーセットだ。ECMA規格に従った最新のJavaScriptの機能を、古いWebブラウザやランタイムが扱えるようにコンパイルすることもできる。

 Microsoftは、TypeScript 5.4のRelease Candidate(RC:リリース候補)の目標公開日を2月20日、正式版の目標公開日を3月5日としている。

 TypeScript 5.4では、最後の代入に続くクロージャによる型の絞り込みの保持、ユーティリティー型「NoInfer」の導入、「Object.groupBy」と「Map.groupBy」の宣言の追加など、さまざまな機能追加、改善が行われている。

 TypeScript 5.4 β版は、NuGetかnpmコマンドでインストールできる。

npm install -D typescript@beta
npmでのインストールコマンド

TypeScript 5.4の主な新機能

最後の代入に続くクロージャによる型の絞り込みの保持

 TypeScriptは通常、実行される可能性のあるチェックに基づいて、変数の型を絞り込むことができる。だが、絞り込まれた型が関数クロージャ内で保持されるとは限らないという問題があった。

 TypeScript 5.4では、ホイストされていない関数でパラメーターやlet変数が使われている場合、型チェッカーは最後の代入箇所を探し、見つかれば、TypeScriptが関数外から安全に型を絞り込めるようになった。

型を絞り込むサンプルコード(提供:Microsoft)
型を絞り込むサンプルコード(提供:Microsoft)

ユーティリティー型「NoInfer」

 TypeScriptはジェネリック関数を呼び出すとき、渡されたものから型の引数を推測できる。だが、最適な型が何かは必ずしも明確ではない。

 TypeScript 5.4では、ユーティリティー型「NoInfer」が導入された。NoInfer<...>で型を囲むことで、TypeScriptに対し、型推測の候補を見つけるために内部の型を掘り下げて照合しないようにというシグナルを送ることができる。

「Object.groupBy」と「Map.groupBy」

 JavaScriptの新しい静的メソッドである「Object.groupBy」と「Map.groupBy」の宣言が追加された。

 Object.groupByはイテレート可能な要素と、各要素をどの「グループ」に入れるかを決定する関数を取る。この関数は、各グループの「キー」を作る必要があり、Object.groupByはそのキーを使って、各キーが元の要素を含む配列にマップされるオブジェクトを作る。

 つまり、

Object.groupByの使用例(提供:Microsoft)
Object.groupByの使用例(提供:Microsoft)

 上記のJavaScriptは基本的に、下記と同じだ。

evenとoddのプロパティを持つmyObjオブジェクト(提供:Microsoft)
evenとoddのプロパティを持つmyObjオブジェクト(提供:Microsoft)

 Map.groupByはObject.groupByと似ているが、プレーンなオブジェクトの代わりにMapを生成する。

Map.groupByの使用例(提供:Microsoft)
Map.groupByの使用例(提供:Microsoft)

 上記のmyObjは、以前と同様に下記のように作成することも可能だ。

(提供:Microsoft)
(提供:Microsoft)

 Microsoftは「Mapの保証が必要な場合や、Mapを期待するAPIを扱っている場合、JavaScriptのプロパティ名として使えるキーだけでなく、任意のキーをグループ化に使う必要がある場合は、Map.groupByの方が望ましいかもしれない」と述べている。

--moduleResolution bundlerと--module preserveでのrequire()呼び出しのサポート

 TypeScriptには、bundlerというmoduleResolutionオプションがあるが、オプションの制限の一つは、-module esnextと組み合わせなければならないため、import ... = require(...)という構文が使えないことだった。

 TypeScript 5.4では、preserveという新しいオプションでmodule設定を行う際に、require()が使えるようになった。

インポート属性とアサーションのチェック

 インポート属性とアサーションが、グローバルなImportAttributes型に対してチェックされるようになった。これにより、ランタイムがインポート属性をより正確に記述できるようになった。

ImportAttributesの使用例(提供:Microsoft)
ImportAttributesの使用例(提供:Microsoft)

TypeScript 5.0での非推奨事項は、コードの移行が必要に

 TypeScript 5.0では、以下のオプションと動作が非推奨となった。

  • target: ES3
  • noImplicitUseStrict
  • keyofStringsOnly
  • suppressExcessPropertyErrors
  • suppressImplicitAnyIndexErrors
  • noStrictGenericChecks
  • charset
  • out
  • プロジェクト参照でのprepend
  • 暗黙的にOS固有のnewLine

 これらを使い続けるには、TypeScript 5.0以降を使用する開発者は、ignoreDeprecationsという新しいオプションを「5.0」という値で指定する必要があった。

 TypScript 5.4は、これらが正常に機能し続ける最後のバージョンとなる。TypeScript 5.5(2024年6月にリリースされる見込み)では、これらはハードエラーとなり、これらを使用しているコードは移行する必要がある。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る