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: es5とdownlevelIteration。moduleResolution: node/node10とmoduleResolution: classic。module: amd, umd, systemjs, none。baseUrl(ユーザーはpathsをプロジェクトルート相対に更新する必要があります)。esModuleInteropまたはallowSyntheticDefaultImportsをfalseに設定すること。alwaysStrictをfalseに設定すること。
サイドバイサイドインストール
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 を使用する必要があります。