BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Noinferユーティリティ型と改良された型推論を追加したTypescript5.4のベータ版がリリース

Noinferユーティリティ型と改良された型推論を追加したTypescript5.4のベータ版がリリース

ブックマーク

原文リンク(2024-02-18)

TypeScriptの主任プログラムマネージャーであるDaniel Rosenwasser氏は先日、TypeScript 5.4のベータ版リリースを発表した。TypeScript 5.4では、型推論が改善され、新しいNoInferユーティリティ型が追加されたほか、いくつかの変更点がある。

TypeScript 5.4のベータ版では、クロージャで絞り込まれる一部の型の型推論が改善された。


function getUrls(url: string | URL, names: string[]) {
  if (typeof url === "string") {
    url = new URL(url);
  }

  return names.map(name => {
    url.searchParams.set("name", name)
    // ~~~~~~~~~~~~
    // error!
    // Property 'searchParams' does not    exist on type 'string | URL'.  

    return url.toString();
  });
}

 

上記のコードでは、mapのarrow関数のクロージャ内のurl変数は必然的にURL型である。以前のバージョンのTypeScriptでは、getUrls関数のシグネチャのように、urlの型をstring | URLと推測していた。リリースされたベータ版では、arrow関数は常にURLオブジェクトのurlへの最後の代入の後に生成され、その結果urlURL型であると推論されることを正しく理解している。

一部の開発者はTwitterでこの推論の改善を賞賛した。

もしこれらの型絞り込みの変更が見た目通り良いものであれば、これは大きな改善であり、不要なif文や!演算子などを大幅に削減できます。(出典)

クロージャのPreserved Narrowingはとても役に立ちそうです。(出典)

詳細はリリースノート(Preserved Narrowing in Closures Following Last Assignments)を参照してほしい。

TypeScript 5.4では、JavaScriptの新しい静的メソッドObject.groupByMap.groupBy宣言も追加されている。リリースノートには以下のような注意書きがある。

これらのメソッドにアクセスするには、targetesnextに設定するか、libの設定を調整する必要がある。これらのメソッドはいずれ安定したes2024ターゲットでも利用可能になると期待している。

さらにTypeScriptは、開発者がTypeScriptの型推論をオプトアウトするための新しいNoInferユーティリティ型を提供している。NoInferにより、開発者は有効だが不要な型への推論をブロックできる。これは、汎用的な型パラメーターを扱う場合に特に有用である。

function createStreetLight<C extends string>(colors: C[], defaultColor?: NoInfer<C>) {
  // ...
}

createStreetLight(["red", "yellow", "green"], "blue");
// ~~~~~~
// error!
// Argument of type '"blue"' is not assignable to parameter of type 
// '"red" | "yellow" | "green" | undefined'.

前述のコードサンプルでは、TypeScript 5.4はオプションのパラメータdefaultColorの型としてCを代入しているが、それ以上の推論は行わず、最終的にCの型を"red" | "yellow" | "green "と解決している。以前のバージョンのTypeScript(NoInferユーティリティ型を持っていない)では、Cの型は"red" | "yellow" | "green" | "blue"と推論される。

開発者はマイクロソフトの開発者ブログで、このリリースで精度が向上したことによる変更点を含む、リリースノートの全文を確認できる。リリースノートには、追加の技術的な詳細、例、リリースの機能の全リストが含まれている。

リリースされたベータ版を以下の手順でインストール可能だ。

npm install -D typescript@beta

作者について

この記事に星をつける

おすすめ度
スタイル

BT