TypeScript 7.1 Beta公開、型検査を高速化し外部ツール向けAPIを追加
出典: devblogs.microsoft.com

Microsoftは2026年10月20日、TypeScript 7.1 Betaを公開しました。Goで実装されたコンパイラーの型検査を高速化し、JavaScript製の外部ツールから解析機能を利用するAPIと、Vueなどの複合ファイルを扱うプラグイン機構を追加しています。ベータ版は npm install -D typescript@beta で導入できます。

5つのコードベースで型検査時間とメモリを比較

Microsoftが5つのコードベースでTypeScript 7.0と7.1 Betaを比較した結果、型検査の処理時間は1.2〜1.9倍に短縮し、メモリ使用量は15.8〜49.6%減りました。測定では型検査のスレッド数を既定の4に設定し、ファイルを出力しない --noEmit を指定しています。

mui-docsでは処理時間が22.2秒から11.9秒に、メモリ使用量が8,093MiBから4,079MiBに減りました。vscodeでは処理時間が21.6秒から17.7秒に、メモリ使用量が8,387MiBから6,943MiBになっています。

7.0ではコンパイラーをGoへ移植し、ネイティブコードでの実行と並列処理を導入しました。7.1 Betaでは型検査に使うデータ構造を小さくし、ファイル変更時に解析結果を再利用する仕組みも改善しています。

JavaScriptから解析機能を呼び出すAPI

7.1 Betaでは、JavaScript製のツールから構文解析や型情報の取得に使えるAPIが追加されました。同期処理向けの typescript/sync、非同期処理向けの typescript/async、ファイルシステム向けの typescript/fs など、用途別に入口が分かれています。構文木のノード型や列挙型は typescript/ast から利用できます。

APIはJavaScript側から呼び出しますが、コンパイラー本体はGoで動きます。Go側の構文木や型情報はGoのメモリ上にあり、Node.js側から同じオブジェクトを直接参照する仕組みではありません。ツールは識別子などの情報を受け取り、不要になったオブジェクトを .dispose() で解放する設計が検討されています。

APIには、プロジェクトやプログラムの状態を保持するスナップショットもあります。変更したファイルの情報を渡すと、以前のスナップショットを基に新しい状態を作れるため、ツールは毎回すべての情報を渡し直す必要がありません。更新前の状態も参照でき、変更前後のエラーを比較できます。

Vueなどの複合ファイルをプラグインで解析

content mapper は、Vueの .vue ファイルのようにHTML、JavaScript、CSSをまとめたファイルを、TypeScriptが解析できる形に変換するプラグインです。プラグインは変換後のコードと元ファイル上の位置情報を渡し、TypeScriptはそれを使って元ファイル上のエラー表示やコード補完を行います。

この仕組みは、コマンドラインでの型検査とエディターでの編集支援の両方に使えます。Astro、CSS Modules、Ember、MDX、Svelte、Vue向けに、試作または実装が進んでいます。設定では tsconfig.json の contentMappers にパッケージ名と対象拡張子を登録します。

プラグインは外部コードとして実行されるため、コマンドラインでは --runExternalCode による許可が必要です。VS Codeでもワークスペースの信頼と実行許可が求められます。VS Code拡張機能では js/ts.contentMappers.enabled を使って機能全体を無効にできます。

import属性とECMAScript 2026の型定義

7.1では、declare module にimport属性を付けて型を宣言できるようになりました。たとえば type: "text" を指定したモジュール宣言を用意すると、属性を付けて読み込んだ .txt や .md の内容を文字列として扱えます。必要な属性を付け忘れると、型検査でエラーになります。

この型宣言はTypeScriptの標準ライブラリーには含まれず、必要に応じてプロジェクト内の .d.ts ファイルに記述します。実際に読み込むには、実行環境やバンドラーもimport属性に対応している必要があります。

また、--target と --lib に安定版の es2026 が加わり、Array.fromAsync() や Uint8Array のBase64・16進数変換メソッドなどの型定義を利用できます。import source 構文にも対応し、WebAssemblyでは解析済みの WebAssembly.Module を取得して、必要な時点でインスタンスを作成できます。実行環境の対応が必要で、JavaScriptモジュール向けの対応はまだ限られています。

移行時の型検査と今後の公開予定

DOMの型定義が更新され、既存コードの型検査結果が変わる場合があります。条件付き型では、ユニオン型を候補ごとに評価する際の制約チェックが厳格になりました。そのため、ユニオン全体では成り立つ制約でも、候補の一つでは成り立たないコードがエラーになることがあります。

Microsoftはフィードバックを受けて速度と安定性の改善を進め、ベータ公開から約1カ月後にリリース候補版、その後に正式版を公開する予定です。