検索
ニュース

Microsoft、プログラミング言語「TypeScript 5.6」正式版公開 真偽値チェックのバグ提示など新機能を追加イテレータヘルパーメソッドの追加など使い勝手を向上

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

Share
Tweet
LINE
Hatena

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

 TypeScriptは、静的型付けができる言語で、JavaScriptのスーパーセットだ。ECMA規格に従った最新のJavaScriptの機能を、古いWebブラウザやランタイムが扱えるようにコンパイルすることもできる。

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

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

TypeScript 5.6の主な新機能

常に「真」または「Null」となるチェックをコンパイルエラーにする

 TypeScript 5.6では、不適切なNullishチェックや真値(truthy)チェックにエラーを出力するようになった。常に真値またはNullとなる構文がある場合、コンパイルエラーを出力する。これにより、コード内の誤りを早く発見できる。

 「true」「false」「0」「1」が使われている式の場合、このエラーは出力されないという。

if (/0x[0-9a-f]/) {
//  ~~~~~~~~~~~~
// error: This kind of expression is always truthy.
}
if (x => 0) {
//  ~~~~~~
// error: This kind of expression is always truthy.
}
function isValid(value: string | number, options: any, strictness: "strict" | "loose") {
    if (strictness === "loose") {
        value = +value
    }
    return value < options.max ?? 100;
    //     ~~~~~~~~~~~~~~~~~~~
    // error: Right operand of ?? is unreachable because the left operand is never nullish.
}
if (
    isValid(primaryValue, "strict") || isValid(secondaryValue, "strict") ||
    isValid(primaryValue, "loose" || isValid(secondaryValue, "loose"))
) {
    //                    ~~~~~~~
    // error: This kind of expression is always truthy.
}
常に真値やNullを返すチェックへのエラーを出力するイメージ(提供:Microsoft)

イテレータヘルパーメソッドの追加

 TypeScript 5.6では、配列(Array)にのみ存在していたメソッド(map、filter、take)などがイテラブルイテレータ(IterableIterator)にも追加され、より柔軟な操作が可能になった。

function* positiveIntegers() {
    let i = 1;
    while (true) {
        yield i;
        i++;
    }
}
const evenNumbers = positiveIntegers().map(x => x * 2);
// Output:
//    2
//    4
//    6
//    8
//   10
for (const value of evenNumbers.take(5)) {
    console.log(value);
}

 またイテレータを拡張する新しい型として「IteratorObject」が導入された。これは以下のように定義されている。

interface IteratorObject<T, TReturn = unknown, TNext = unknown> extends Iterator<T, TReturn, TNext> {
    [Symbol.iterator](): IteratorObject<T, TReturn, TNext>;
}

 多くの組み込みコレクションやメソッドは「IteratorObject」のサブタイプ(「ArrayIterator」「SetIterator」「MapIterator」など)を生成する。「lib.d.ts」内のコアJavaScriptおよびDOMの型、そして「@types/node」も、この新しい型を使用するように更新されている。

厳密な組み込みイテレータチェックとstrictBuiltinIteratorReturnフラグの導入

 TypeScript 5.6では、「BuiltinIteratorReturn」と呼ばれる新しい組み込み型と、「--strictBuiltinIteratorReturn」という新しい「--strict-mode」フラグが導入された。「lib.d.ts」のような場所で、IteratorObjectが使用される場合、TReturnには常にBuiltinIteratorReturn型が使用されるようになる。

任意のモジュール識別子のサポート

 TypeScript 5.6では、通常は変数名として使えない絵文字や特殊な文字列を、有効な変数名に変換することで扱うことができるようになった。

const banana = "🍌";
export { banana as "🍌" };
エクスポート側のコード例
import { "🍌" as banana } from "./foo"
/**
 * om nom nom
 */
function eat(food: string) {
    console.log("Eating", food);
};
eat(banana);
インポート側のコード例

--noUncheckedSideEffectImportsオプションを追加

 「--noUncheckedSideEffectImports」という新しいコンパイラオプションが追加された。このオプションを有効化すると、サイドエフェクトインポートの際に対応するソースファイルが見つからない場合、TypeScriptはエラーを出力するようになる。

--noCheckオプションを追加

 全ての入力ファイルに対する型チェックをスキップできる「--noCheck」オプションが追加された。

 反復的に開発を進める際には、「tsc --noCheck」を実行し、その後「tsc --noEmit」で徹底的な型チェックを実行するなど、JavaScriptファイルの生成と型チェックのフェーズを分離できるようになる。

 TypeScript 5.6では、他にも以下のような機能の追加や最適化、改善が実施されている。

  • 依存関係におけるエラーが発生してもビルドを継続するプロセス改善
  • 表示領域に対する優先的なファイル診断で編集のレスポンスを向上
  • 特定の文字で補完を自動確定させる精度の改善
  • 正規表現で自動インポートの候補を除外できる設定を追加

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る