TypeScript 7.0 リリースノート: ネイティブ移植とパフォーマンスの向上

TypeScript 7.0 リリースノート: ネイティブポートとパフォーマンス向上

TypeScript 7.0 は、Go で実装されたネイティブポートにより、オーダーオブマグニチュードの速度向上を実現

TypeScript 7.0 は、Go で構築された TypeScript コンパイラのネイティブポートで、最新ハードウェアの活用を最大化するよう設計されています。共有メモリマルチスレッドとネイティブコード最適化を実装することで、TypeScript 7.0 は通常、TypeScript 6.0 に比べてフルビルドで 8 倍から 12 倍の速度向上を達成し、同時に総メモリ消費も削減します。

パフォーマンスベンチマーク

大規模なオープンソースコードベースでの実際のテストにより、ビルド時間とメモリ使用量の両方が大幅に削減されることが示されています。

Codebase TS 6 Build Time TS 7 Build Time Speedup Memory Delta
vscode 125.7s 10.6s 11.9x -18%
sentry 139.8s 15.7s 8.9x -6%
bluesky 24.3s 2.8s 8.7x -26%
playwright 12.8s 1.47s 8.7x -11%
tldraw 11.2s 1.46s 7.7x -15%

フルビルド以外でも、エディタ体験は同様に高速化されています。たとえば、VS Code のコードベースでファイルを開いたときに最初のエラーが表示されるまでの時間は、TypeScript 6 では 17.5 秒だったのが、TypeScript 7 では 1.3 秒未満に短縮されました。

並列化とスケーリング制御

TypeScript 7.0 は、パース、型チェック、エミットを並列化します。特定のハードウェアや CI 環境向けにパフォーマンスを最適化するため、今回のリリースではいくつかの新しいフラグが導入されました。

  • --checkers: 型チェッカーワーカーの数を制御します(デフォルトは 4)。コア数の多いマシンでは増やすことで速度が向上しますが、メモリ使用量も増加します。リソースが限られた環境では 1 に減らすことで重複作業を排除できます。
  • --builders: --build 操作中に使用される並列プロジェクト参照ビルダーの数を制御します。特にモノレポで有益です。
  • --singleThreaded: すべての並列化を無効化し、ワーカー数を 1 に固定し、パースとエミットを単一スレッドで実行します。主にデバッグや極端に制限された環境向けです。

再構築された Watch モード

--watch モードは、Parcel バンドラのファイルウォッチャーの Go ポートを使用して完全に再構築されました。この置き換えにより C++ ツールチェーンが不要になり、効率的で安定したクロスプラットフォームのファイル監視が提供されます。この更新により、リソース使用量が大幅に改善され、さまざまな OS での安定性が向上しました。

TypeScript 6.0 からの互換性と移行

TypeScript 7.0 は、TypeScript 6.0 の型チェックと CLI 動作と互換性がありますが、6.0 のデフォルト設定を踏襲し、いくつかの 6.0 の非推奨項目をハードエラーに変換します。

破壊的な設定変更

7.0 ではいくつかのデフォルトが変更されています:

  • strict がデフォルトで true になりました。
  • module のデフォルトは esnext です。
  • stableTypeOrdering がデフォルトで true になり、無効化できません。
  • rootDir のデフォルトが ./ になり、内部ソースディレクトリには明示的な設定が必要です。
  • types のデフォルトが [](以前は ["*"])になりました。

非対応機能

以下はサポートされず、ハードエラーが発生します:

  • target: es5downlevelIteration
  • moduleResolution: node/node10moduleResolution: classic
  • module: amd, umd, systemjs, none
  • baseUrl(ユーザーは paths をプロジェクトルート相対に更新する必要があります)。
  • esModuleInterop または allowSyntheticDefaultImportsfalse に設定すること。
  • alwaysStrictfalse に設定すること。

サイドバイサイドインストール

TypeScript 7.0 はまだ安定したプログラマティック API(7.1 で提供予定)を提供していないため、typescript-eslint などのツール向けに 6.0 と併用して実行できます。6.0 互換パッケージは次のコマンドでインストールできます:

npm install -D typescript@npm:@typescript/typescript6

両バージョンを使用する場合、以下の package.json 設定が推奨されます:

{
  "devDependencies": {
    "@typescript/native": "npm:typescript@^7.0.2",
    "typescript": "npm:@typescript/typescript6@^6.0.2"
  }
}

言語と JavaScript の更新

テンプレートリテラル型における Unicode

TypeScript 7.0 は、テンプレートリテラル型の推論時に Unicode コードポイントを保持します。サロゲートペア(例: 絵文字)を単一ユニットとして扱い、for...of ループや配列スプレッドの挙動と一致させ、JavaScript の UTF-16 インデックスとは異なる動作をします。

一貫した JavaScript 解析

JavaScript のサポートは、TypeScript の解析とより密接に整合するように再設計されました。主な変更点は次のとおりです:

  • 型が期待される場所で値を使用できなくなり、typeof を使用する必要があります。
  • @enum はもはや特別に認識されず、代わりに @typedef を使用します。
  • 単独の ? は有効な型ではなくなり、any を使用してください。
  • @class は関数をコンストラクタにしなくなります。
  • クロージャースタイルの関数構文(例: function(string): void)はサポートされなくなります。

エディタサポートとエコシステムの制限

TypeScript 7.0 は Language Server Protocol (LSP) とマルチスレッドを活用し、エディタの応答性を向上させます。VS Code ユーザーは専用拡張機能を通じてこれらの改善を利用でき、Visual Studio はワークスペースに基づいて自動的に有効化します。

埋め込み言語に関する注意: Vue、MDX、Astro、Svelte、Angular テンプレートを使用するワークフローは、まだ安定していないプログラマティック API に依存しているため、TypeScript 7.0 を利用できません。これらのツールは API が 7.1 でリリースされるまで、引き続き TypeScript 6.0 を使用する必要があります。

Sources