TypeScript 6.0 の新機能と破壊的変更 - JavaScript製で書かれる最後のコンパイラ

TypeScript 6.0 の新機能と破壊的変更 - JavaScript製で書かれる最後のコンパイラ

作成日:
読了:10
更新日:

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)とみなされなくなり、型推論の精度が上がりました

y が number と推論される
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/* のように中間セグメントが要りました。

package.json
{
  "type": "module",
  "imports": { "#/*": "./dist/*" }
}

es2025 と Temporal などの型追加

  • target/libes2025 に対応RegExp.escape など ES2025 のビルトイン型を同梱
  • Temporal API の型定義を追加(TC39 Stage 4)。日時の新標準を型付きで扱える
  • Map/WeakMapgetOrInsert/getOrInsertComputed の型(Upsert提案)。関連はES2026 の新機能も参照
  • dom lib に dom.iterable / dom.asynciterable を統合"lib": ["dom"] だけで反復系の型も含まれる(機能削除ではなく統合)
Temporal と getOrInsert の型
const yesterday = Temporal.Now.instant().subtract({ hours: 24 });
 
function read(opts: Map<string, unknown>) {
  const strict = opts.getOrInsert("strict", true);
}

破壊的変更(ここが本番)

6.0 は既定値の変更と古い機能の削除が一度に来ます。5.x 系からの更新では、ここを必ず確認してください。

既定値(デフォルト)の変更

オプション旧既定新既定
strictfalsetrue
modulecommonjsesnext
targetes2020es2025
types自動解決[](明示が必要)
noUncheckedSideEffectImportsfalsetrue
rootDir推論tsconfig.json のある場所

strict: true がデフォルトになるため、未設定のプロジェクトは大量の型エラーが一気に出る可能性があります。

即削除(6.0 で使用不可)

  • --module amd | umd | system | none
  • --moduleResolution classic
  • --outFile
  • module Foo {} という名前空間構文namespace Foo {} を使う)
  • import の assert { type: "json" }with { type: "json" } に変更)
名前空間と import 属性の置き換え
// 廃止 -> 正しい
// 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" で猶予できますが、移行は早めに。

baseUrl 廃止後の paths 書き換え
  {
    "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.0tsgo 7.0
VS Code89.11秒8.74秒
Sentry133.08秒16.25秒
Playwright9.30秒1.24秒

公式は「フルビルドで 6.0 比およそ10倍になることが多い」と表現しています(倍率はプロジェクト次第)。つまり速度の本命は 7.0で、6.0 はそこへ移るための整地作業という位置づけです。

NOTE

版の取り違えに注意。RegExp.escapeES2025Map.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製コンパイラへの移行はぐっと楽になります。

参考リンク

Node.js 26 の注目点 - Temporal 既定有効と「ビルドなしTS実行」の現在地

Node.js 26 の注目点 - Temporal 既定有効と「ビルドなしTS実行」の現在地

8

2026年5月リリースの Node.js 26 を整理します。長く待たれた Temporal API のデフォルト有効化、type stripping によるビルドなし TypeScript 実行の安定化(と --experimental-transform-types の削除が意味すること)、V8 14.6・Undici 8 への更新、レガシー stream モジュールの削除など、移行前に押さえておきたい差分をまとめます。

Node.jsが年1回のメジャーリリースへ - Node 27からの新スケジュールとLTSの考え方

Node.jsが年1回のメジャーリリースへ - Node 27からの新スケジュールとLTSの考え方

7

Node.js が 2026年3月の公式発表でリリーススケジュールを変更します。Node 27(2027年)から、メジャーは年1回(毎年4月)に集約され、奇数/偶数の区別を廃止して全リリースが LTS 対象に。早期テスト用の Alpha チャンネル新設、総サポート期間の36か月化など、新旧スケジュールの違いと、Node 26 / Node 27 の位置づけ、運用への影響を Node.js 公式ブログを一次ソースに整理します。