
TypeScript 6.0 の新機能と破壊的変更 - JavaScript製で書かれる最後のコンパイラ
2026年3月23日、TypeScript 6.0 がリリースされました。これは普通のメジャー更新ではありません。公式が「現在のJavaScriptコードベースに基づく最後のリリースにするつもりだ」と明言した、特別な節目です。この記事では、6.0 の位置づけ・新機能・破壊的変更・移行方法を、TypeScript公式ブログとリリースノートを一次ソースに整理します。
6.0 は「7.0 へのブリッジ」
公式は 6.0 を TypeScript 5.9 と 7.0 のあいだの「橋(bridge)」と位置づけています。7.0 はコードネーム Project Corsa として開発されてきた Go製の新コンパイラで、6.0 はそこへ滑らかに移るために、非推奨化と既定値の変更を一括導入したリリースです。
- 6.0 はJavaScript(TypeScript自身)で書かれる最後のコンパイラ
- 6.1 などの 6.x 続編は予定なし。6.0 以降のパッチはセキュリティ・重大リグレッション・6.0/7.0 互換性の問題に限定
- 開発リソースはほぼ 7.0 に集中
7.0 そのもの(Go製アーキテクチャと性能)はTypeScript 7(Go製ネイティブコンパイラ Corsa)で扱っているので、本記事は「6.0 で何が変わり、どう移行するか」に絞ります。
6.0 の主な新機能
this を使わない関数の推論改善
メソッドが this を実際に使わない場合、文脈依存(contextually sensitive)とみなされなくなり、型推論の精度が上がりました。
declare function callIt<T>(obj: {
produce: (x: number) => T;
consume: (y: T) => void;
}): void;
callIt({
produce: (x: number) => x * 2,
consume: (y) => y.toFixed(), // y は number
});#/ サブパスインポート
Node.js の imports フィールドで #/ 始まりのパスが直接書けるようになりました。従来は #root/* のように中間セグメントが要りました。
{
"type": "module",
"imports": { "#/*": "./dist/*" }
}es2025 と Temporal などの型追加
target/libがes2025に対応。RegExp.escapeなど ES2025 のビルトイン型を同梱- Temporal API の型定義を追加(TC39 Stage 4)。日時の新標準を型付きで扱える
Map/WeakMapのgetOrInsert/getOrInsertComputedの型(Upsert提案)。関連はES2026 の新機能も参照domlib にdom.iterable/dom.asynciterableを統合。"lib": ["dom"]だけで反復系の型も含まれる(機能削除ではなく統合)
const yesterday = Temporal.Now.instant().subtract({ hours: 24 });
function read(opts: Map<string, unknown>) {
const strict = opts.getOrInsert("strict", true);
}破壊的変更(ここが本番)
6.0 は既定値の変更と古い機能の削除が一度に来ます。5.x 系からの更新では、ここを必ず確認してください。
既定値(デフォルト)の変更
| オプション | 旧既定 | 新既定 |
|---|---|---|
strict | false | true |
module | commonjs | esnext |
target | es2020 | es2025 |
types | 自動解決 | [](明示が必要) |
noUncheckedSideEffectImports | false | true |
rootDir | 推論 | tsconfig.json のある場所 |
strict: true がデフォルトになるため、未設定のプロジェクトは大量の型エラーが一気に出る可能性があります。
即削除(6.0 で使用不可)
--module amd | umd | system | none--moduleResolution classic--outFilemodule Foo {}という名前空間構文(namespace Foo {}を使う)- import の
assert { type: "json" }(with { type: "json" }に変更)
// 廃止 -> 正しい
// module Foo { export const bar = 10 }
namespace Foo { export const bar = 10; }
// 廃止 -> 正しい
// import data from "./d.json" assert { type: "json" }
import data from "./d.json" with { type: "json" };廃止予定(ignoreDeprecations で猶予)
target: es5、--downlevelIteration、--moduleResolution node、--baseUrl などは6.0 で非推奨・7.0 で削除です。当面は ignoreDeprecations: "6.0" で猶予できますが、移行は早めに。
{
"compilerOptions": {
- "baseUrl": "./src",
"paths": {
- "@app/*": ["app/*"]
+ "@app/*": ["./src/app/*"]
}
}
}WARNING
tsconfig.json があるディレクトリで tsc foo.ts のようにファイルを直接指定するとエラーになります(設定が無視される事故を防ぐため)。どうしても単発で動かすなら tsc --ignoreConfig foo.ts を使います。
移行のための診断フラグ: stableTypeOrdering
7.0 とは型の並び順が一部変わるため、6.0 には --stableTypeOrdering という移行診断フラグがあります。型の順序を 7.0 の挙動に合わせて差分を洗い出せますが、最大25%ほど型チェックが遅くなるため、常用ではなく移行時の一時利用に留めます。
性能はどうか(6.0 vs 7.0)
6.0 自体のビルド速度向上について、公式に明確な数値は示されていません。よく出回る「約10倍高速」という数字は 6.0 と 7.0(Go製)の比較であって、6.0 単体の改善値ではない点に注意してください。
| プロジェクト | tsc 6.0 | tsgo 7.0 |
|---|---|---|
| VS Code | 89.11秒 | 8.74秒 |
| Sentry | 133.08秒 | 16.25秒 |
| Playwright | 9.30秒 | 1.24秒 |
公式は「フルビルドで 6.0 比およそ10倍になることが多い」と表現しています(倍率はプロジェクト次第)。つまり速度の本命は 7.0で、6.0 はそこへ移るための整地作業という位置づけです。
NOTE
版の取り違えに注意。RegExp.escape は ES2025、Map.getOrInsert などは ES2026 の機能で、6.0 はそれらの型を取り込んだだけです(言語版とコンパイラ版は別物)。また「2.0 以来最大級の破壊的変更」という言い回しは広く使われますが、公式の表現かは未確認です。
まとめ
- TypeScript 6.0(2026-03-23)は JavaScript製の最後のコンパイラ。7.0(Go製・Corsa)へのブリッジで、6.x の続編は予定なし
- 新機能は this なし関数の推論改善・
#/サブパス・es2025 lib・Temporal/getOrInsert の型・dom 統合 - 破壊的変更は
strict/module/target/typesの既定変更、amd/umd・outFile・module 名前空間・import assert の削除。baseUrlなどは非推奨(7.0 で削除) - 移行は
ignoreDeprecations: "6.0"で猶予し、--stableTypeOrderingで 7.0 との差分を洗う - 「約10倍」は 7.0 との比較。速度の本命は 7.0
6.0 は派手な新機能より「7.0 へ安全に渡るための片付け」が主眼です。いま既定値の変更と廃止に対応しておけば、Go製コンパイラへの移行はぐっと楽になります。


