TypeScript 6.0が来た — strictがデフォルトになり、コンパイラがGoで書き直される
TypeScript 6.0が2026年3月23日にリリースされました。
「あ、マイナーアップデートでしょ」って思った人。ごめんなさい、そんな小さなリリースじゃありません。デフォルト設定が9つ変更されて、いくつかのオプションは完全に削除されて、気づかずにアップグレードすると結構壊れます。
でも何より驚きなのは、TypeScript 6.0が「TypeScriptで書かれた最後のTypeScript」 だということ。Microsoftがこっそりコンパイラ全体をGoで書き直していて、そのベンチマークが正直ヤバいです。
今日はTypeScript 6.0の変化点を整理したいと思います。
strictがデフォルトになった
これが一番影響が大きい変更です。
TypeScript 6.0から、tsconfig.json で strict を明示的に false にしていない限り、strict: true がデフォルト になります。これまで strict 未指定 = 緩いモードでしたが、6.0からは逆になります。
有効になる8つのチェック:
| チェック | 効果 |
|---|---|
strictNullChecks |
null と undefined を独立した型として扱う |
noImplicitAny |
暗黙の any を禁止 |
strictFunctionTypes |
関数パラメータの型チェックを厳格化 |
strictPropertyInitialization |
クラスプロパティはコンストラクタで初期化必須 |
strictBindCallApply |
bind/call/apply を正しく型チェック |
noImplicitThis |
this が暗黙的に any になるのを禁止 |
alwaysStrict |
全ファイルに "use strict" を付与 |
useUnknownInCatchVariables |
catch のエラー変数が unknown に |
これまで strict を設定していなかったプロジェクトは、アップグレードすると「赤の壁」に直面します。でも長期的にはこれで正しい方向です。strictなしでTypeScriptを使うのは、シートベルトなしで車を運転するようなものですから。
ES2025がデフォルトターゲットに
TypeScript 6.0は target をデフォルトで ES2025 に設定します。これまでのデフォルトは ES2020(あるいは ES3)だったので、結構飛躍です。
これで標準で使えるようになるAPI:
// Set operations — ライブラリ不要
const a = new Set([1, 2, 3]);
const b = new Set([2, 3, 4]);
a.intersection(b); // Set { 2, 3 }
a.union(b); // Set { 1, 2, 3, 4 }
a.difference(b); // Set { 1 }
// Promise.try — 同期コードをPromiseでラップ
const result = await Promise.try(() => JSON.parse(str));
// Iterator helpers
const filtered = arr.values().filter(x => x > 0).take(5);
lodashやramdaに頼っていた処理の多くが、ネイティブで書けるようになります。
#/ インポートでパスがスッキリ
Node.jsのsubpath imports(package.json の imports フィールド)にTypeScript 6.0が正式対応しました。
// package.json
{
"imports": {
"#/*": "./src/*"
}
}
// これが
import { formatDate } from '../../utils/formatDate';
// こう書ける
import { formatDate } from '#/utils/formatDate';
Go-to-Definitionも正しく動くので、IDE体験はそのまま。モノレポや深いディレクトリ構成のプロジェクトでは地味に効きます。
ESMがデフォルトに
TypeScript 6.0では module のデフォルトが ESNext(ESM)になります。これまでのデフォルトはCommonJSでした。
// 5.x まではこれがデフォルト
{
"module": "commonjs"
}
// 6.0 からはこれがデフォルト
{
"module": "ESNext"
}
CommonJSが必要なプロジェクトでは tsconfig.json に明示的に module: "commonjs" と書けばそのまま動きます。後方互換は維持されているので、急に壊れることはありません。
ここがヤバい: コンパイラがGoで書き直されている(Project Corsa)
ここからが本題です。
MicrosoftはTypeScriptコンパイラ全体をGoで書き直すプロジェクト Project Corsa を進めています。そして、TypeScript 6.0が「Go版登場前の最後のTypeScript版」になります。
ベンチマークを見てください。
VS Codeの150万行のコードベースで:
- TypeScript 5.x(現行): 型チェックに 77秒
- Go版コンパイラ: 型チェックに 7.5秒
10倍以上の高速化 です。これは「少し速くなった」レベルじゃない。全く別のツールです。
なぜそんなに速いのか。理由はいくつかあります:
- 並列処理: Goのgoroutineで型チェックを並列化
- メモリ効率: GoのGCがV8のGCよりこの用途では効率的
- 起動コスト: Node.jsの起動オーバーヘッドがゼロに
VS Codeのような巨大プロジェクトで10倍速くなると、開発体験が根本的に変わります。「保存してからエラーが出るまで数秒待つ」という体験が「ほぼリアルタイム」になります。
Go版はTypeScript 7.0で導入される予定です。
アップグレード方法
5.x → 6.0 の移行は、Microsoftが公式の移行CLIを用意してくれています。
npx @andrewbranch/ts5to6
機械的な移行部分(tsconfig.json の更新、非推奨オプションの書き換えなど)を自動でやってくれます。ただし、strictが有効になって出る型エラーは手動で修正する必要があります。
まとめ: TypeScriptは「厳しくなる」方向に進んでいる
なんかこう、TypeScriptの進化の方向性がはっきりしてきたなと思います。「デフォルトで安全」にどんどん寄せていく。
strictがデフォルト、ES2025がデフォルト、ESMがデフォルト。どれも「モダンで安全な書き方」をデフォルトにする変更です。後方互換は保ちつつ、新規プロジェクトは迷わず良い設定で始められる。
そしてGo版コンパイラが来れば、パフォーマンスの不満もほぼ消える。もう「TypeScript遅い」って言えなくなりそう。
個人的には、今のうちにstrict対応を済ませておくのがおすすめです。6.0にアップグレードした時に赤の壁にぶつかってから慌てるより、今のうちに strict: true を有効にして一つずつ直していった方がずっとラクです。
TypeScript 6.0、いいリリースだと思います。
参考文献:
- Nandan "TypeScript 6.0 Is Here, And Microsoft Is Rebuilding the Entire Compiler in Go for 7.0"
- Microsoft DevBlogs "Announcing TypeScript 6.0"