2月12日、MicrosoftがTypeScript 6.0 Betaをリリースした。

この記事では、TypeScript 6.0 Betaの概要と、次世代のTypeScript 7.0へ向けたロードマップについて詳しく紹介する。
本記事は、以下のエキスパートに監修していただきました:
監修者 うひょさんからのコメント
TypeScript 6.0のベータ版が出たということで、6.0の正式リリースはもちろん、いよいよGo版(7.0)もリリースが近づいてきました。5.9からかなり間が空いた久しぶりのリリースですが、早めにチェックするとよいでしょう。
それ以外では、#/のサポートも密かに熱い新機能です。ぜひ使ってみてください。
TypeScript 7.0への架け橋:Goによる再構築と劇的な高速化
現在、開発チームはTypeScript 7.0のコンパイラおよび言語サービスを、Go言語によるコードベースへの移行を進めている。TypeScript 6.0は、現在のJavaScriptベースのコードベースに基づく「最後のリリース」となる予定である。
Go言語への移行の狙いは、単なる言語の変更ではない。現代のCPUが持つマルチコア性能を最大限に引き出す共有メモリやマルチスレッドの活用により、 型チェックの速度を劇的に向上させることを目的としている。
TypeScript 7.0がもたらす変化は以下の通りである。
- 圧倒的なパフォーマンス: ネイティブコードとして動作し、大規模なプロジェクトでも短時間で型チェックが完了する。
- 決定論的な動作: 並列処理下でも常に同じ結果を保証する新しいアルゴリズムの採用。
- モダンなエコシステムへの最適化: 10年以上蓄積されたレガシーな仕様を整理し、現代のJavaScript開発に最適化された設計へと刷新される。
TypeScript 6.0は、この7.0へスムーズに移行するための「ブリッジ(架け橋)」として機能する。6.0への対応を進めることは、そのまま7.0への準備を完了させることに繋がるため、非常に重要なマイルストーンだと言える。
TypeScript 7.0に備える:6.0での破壊的変更と非推奨事項
TypeScript 7.0では、長年サポートされてきたレガシーなオプションの多くが完全に削除される。6.0ではこれらの多くが非推奨となり、デフォルト設定が変更されている。
1. デフォルト設定の現代化
現代の開発プラクティスに合わせ、以下のデフォルト値が変更された。
- **
strictがデフォルトでtrue**: 厳格な型チェックが標準となる。 - **
moduleがデフォルトでesnext**: ESM(ECMAScript Modules)が主役の時代を反映。 targetがes2025(最新): レガシー環境のためのトランスパイルではなく、最新ランタイムへの最適化が既定となる。- **
typesがデフォルトで[]**: これまでnode_modules/@types内の全パッケージを無差別に読み込んでいた挙動が廃止された。これにより、無関係な型定義の読み込みが減り、多くのプロジェクトでビルド時間が20〜50%改善される。
2. 非推奨となるレガシー機能
以下の機能は7.0で削除されるため、6.0のうちに移行が必要である。
target: es5の廃止: 最低ターゲットが ES2015 となる。module: amd, umd, systemjsの廃止: 古典的なモジュールシステムのサポート終了。--baseUrlの非推奨: 今後はpathsによる相対パス指定への移行が推奨される。outFileの削除: ファイルの結合は、Viteやesbuildなどの高速な外部バンダラに委ねられる。- 名前空間における
moduleキーワードの禁止: 歴史的な経緯で許容されていたmodule Foo {}形式は、namespace Foo {}への書き換えが必須となる。
TypeScript 6.0における新機能と改善点
移行準備だけでなく、6.0単体でも開発体験を向上させる改善が含まれている。
this を使用しない関数での推論精度向上
これまで、オブジェクトリテラルのメソッド構文において型推論が期待通りに働かないケースがあった。
callIt({
consume(y) { return y.toFixed(); }, // 6.0以前は y が unknown になる場合があった
produce(x: number) { return x * 2; },
});
この原因は、TypeScriptが「メソッドは内部で this を使う可能性がある」と慎重に判断していたことにある。this を使う可能性がある関数(文脈依存な関数)は、型推論の優先順位が下げられてしまう。
TypeScript 6.0では、関数内で実際に this が使われているかを解析する。this が使われていないと判断されれば、その関数は「文脈依存ではない」とみなされ、優先的に型推論が行われる。結果として、プロパティの記述順序などに左右されず、正確に型が導き出されるようになった。
#/ によるサブパスインポートのサポート
Node.jsには、package.json の imports フィールドを用いて、パッケージ内部のモジュールにエイリアス(別名)をつける「サブパスインポート」という機能がある。
これまで、このエイリアスは必ず #root/ のように # の直後に識別子が必要だったが、Node.jsの最新版で #/ というシンプルな接頭辞がサポートされた。TypeScript 6.0もこれに追随し、node20 や bundler 設定において #/ を解釈できるようになった。これにより、相対パス ../../ の連鎖を避けるための設定がより簡潔に記述できる。
dom ライブラリの統合による煩わしさの解消
ブラウザ環境向けの開発において、これまでは lib: ["dom"] だけでは不十分なケースがあった。
具体的には、NodeList や HTMLCollection といったDOMの集合体を for...of でループさせたり、スプレッド演算子で配列に変換したりするためのAPI(Symbol.iterator 等の定義)は、dom.iterable という別のライブラリに切り出されていたのである。そのため、多くの開発者は "lib": ["dom", "dom.iterable"] と2つ指定することを強いられてきた。
TypeScript 6.0からは、dom.iterable および dom.asynciterable の内容が標準の dom ライブラリに統合された。今後は "dom" を指定するだけで、以下のような標準的なDOM操作がエラーなく記述可能となる。
// 6.0からは "lib": ["dom"] だけでOK
const divs = document.querySelectorAll("div");
for (const div of divs) {
console.log(div.textContent);
}
まとめ
TypeScript 6.0は、目前に迫った「Goによるネイティブ・ポート(7.0)」というパラダイムシフトへの準備期間である。"ignoreDeprecations": "6.0" を設定すれば既存の警告を一時的に回避できるが、開発チームは早めの対応を強く推奨している。
7.0への移行をスムーズに進めるためにも、まずは 6.0 Beta をプロジェクトに導入し、対応を進めることが非常に重要である。
詳細はAnnouncing TypeScript 6.0 Betaを参照していただきたい。