信頼度ランク
| S | 公式ソース確認済み |
| A | 成功実績多数・失敗例少数 |
| B | 賛否両論 |
| C | 動作未確認・セキュリティリスク高 |
| Z | 個人所感 |
TypeScript 6.0——strictデフォルトON・ESM優先化・TS7 Go移行前の最終JavaScriptベース版が変えること
TypeScript 6.0(2026年3月17日リリース)はstrictモードがデフォルト有効になり、ESModulesがデフォルト解決になる。TypeScript 7(Go製フルリライト)への橋渡しとなる最後のJSベース版の破壊的変更と移行手順を解説。
一言結論
TypeScript 6.0でstrictモードがデフォルトONになった。既存のtsconfig.jsonでstrictを明示していないプロジェクトは型エラーが新たに出る可能性がある。これはTypeScript 7(Go言語によるフルリライト、10倍高速化を目標)への橋渡し版となる最後のJSベースリリースで、tsconfig戦略の再考が必要なタイミングだ。
何が起きたか
2026年3月17日、Microsoft が TypeScript 6.0 を正式リリースした。Beta(2月11日)と RC(2月24日)を経て最終版に至り、既存の TypeScript コードベースにいくつかの破壊的変更をもたらす。
最大の変化は strict: true がデフォルトになったことだ。これまで「明示的に有効化しなければ緩いモードで動く」だったが、v6.0 以降はtsconfig.json で strict を無効化しない限り自動的に strict モードが適用される。
TypeScript 6.0 基本情報:
リリース日: 2026年3月17日
Beta: 2026年2月11日
RC: 2026年2月24日
位置づけ: TS 7(Go rewrite)前の最終 JS ベース版
最大の変化: strict がデフォルト有効
ES Modules: ESM をデフォルト解決戦略に
注: 本記事は 2026年3月リリース版の情報を 2026年5月の文脈でまとめたものです。
変更1: strict がデフォルト ON
何が変わるか
TypeScript の strict フラグは以下を一括で有効化する:
| オプション | 内容 |
|---|---|
noImplicitAny | 型推論できない変数を any にしない |
strictNullChecks | null / undefined を型として明確に扱う |
strictFunctionTypes | 関数型の反変チェック |
strictBindCallApply | bind/call/apply の型チェック |
strictPropertyInitialization | クラスプロパティの初期化保証 |
noImplicitThis | this の型を明示 |
useUnknownInCatchVariables | catch 節の変数を unknown に |
移行前後の比較
// ❌ TS 5.x 以前(strict なし): 通っていたコード
function processUser(user) { // any として暗黙推論されていた
return user.name.toUpperCase();
}
// TS 6.0(strict デフォルト): エラーになる
// Error: Parameter 'user' implicitly has an 'any' type. (7006)
// ✅ TS 6.0 に対応したコード
interface User {
name: string;
email?: string; // optional は明示的に
}
function processUser(user: User): string {
return user.name.toUpperCase();
}
// null チェックも必須になる
function getEmail(user: User): string {
if (user.email === undefined) {
return "N/A";
}
return user.email.toLowerCase();
// ❌ これは TS 6.0 でエラー: user.email?.toLowerCase() ?? "N/A" が正しい
}
既存プロジェクトへの影響と対処
// tsconfig.json での移行戦略
// ① 即時対応(推奨): strict を明示的に保持
{
"compilerOptions": {
"strict": true // 明示することで TS 6.0 以前と同じ挙動
}
}
// ② 段階的移行: strict を分解して徐々に有効化
{
"compilerOptions": {
"noImplicitAny": true, // まずこれから
"strictNullChecks": true, // 次にこれ
// "strictFunctionTypes": true, // 後で追加
// ... 段階的に足していく
}
}
// ③ 旧挙動に戻す(非推奨、技術的負債)
{
"compilerOptions": {
"strict": false // 明示的に無効化すれば TS 5.x と同じ緩いモード
}
}
変更2: ESM がデフォルト解決戦略に
背景
TypeScript のモジュール解決は長らく "moduleResolution": "node" が実質的なデフォルトで、CommonJS (require) を前提としていた。しかし Node.js のネイティブ ESM 対応・Vite/Rollup/esbuild の普及に伴い、v6.0 からは "moduleResolution": "bundler" がデフォルトになった。
// TS 6.0 の tsconfig.json の新しいデフォルト(概念)
{
"compilerOptions": {
"module": "ESNext", // ← ESM 優先
"moduleResolution": "bundler", // ← バンドラー前提の解決
"target": "ES2022"
}
}
何が変わるか
// ❌ 旧来の CommonJS スタイル(警告が出る場合がある)
const fs = require('fs'); // require は ESM では使えない
// ✅ ESM スタイル
import { readFile } from 'fs/promises';
// 相対インポートの拡張子
// ❌ 従来(node 解決では省略できた)
import { utils } from './utils';
// ✅ ESM では .js 拡張子を明示(TypeScript のソースでも .js を書く)
import { utils } from './utils.js';
CommonJS プロジェクトの対処
// CJS プロジェクトを維持する場合の tsconfig.json
{
"compilerOptions": {
"module": "CommonJS",
"moduleResolution": "node", // 旧来の解決方式を明示
"esModuleInterop": true // CJS/ESM 混在の緩和
}
}
変更3: 副作用インポートの未チェックを検出
v6.0 では副作用のみを目的としたインポート(型情報をインポートしないのに import している)に対して新しい警告が追加された。
// ❌ 型のみ使っているのに通常の import を使っている(警告)
import { SomeType } from './types'; // SomeType を値として使っていない
// ✅ 型インポートを明示する
import type { SomeType } from './types'; // コンパイル後に消える
これにより、バンドルサイズの最適化が改善される。
TypeScript 7 への道:なぜ「橋渡し版」なのか
TypeScript 6.0 が注目される理由のひとつは、**「最後の JavaScript ベースの TypeScript」**である可能性が高いことだ。
Microsoft はすでに TypeScript 7(コードネーム: Corsa) の開発を進めており、これは Go 言語によるフルリライトを予定している。目標は 10倍の速度向上(大規模プロジェクトでの型チェック・LSP 応答時間の劇的改善)だ。
TypeScript のロードマップ(2026年時点):
TS 5.9 → TS 6.0 → TS 7.0(Go rewrite)
(旧来) (橋渡し) (次世代)
TS 6.0 の役割:
- strict デフォルト化でコードベースの型健全性を強制
- ESM デフォルト化でモジュールシステムを現代化
- TS 7 が前提とするコードベースの「品質ベースライン」を確立
注意: TypeScript 7 の詳細・リリース時期は 2026年5月時点では未確定の情報を含む。
microsoft/TypeScriptの GitHub Discussions を確認されたい。
移行チェックリスト
# 1. TypeScript を 6.0 へアップデート
npm install typescript@6 --save-dev
# 2. 型チェックを実行してエラーを確認
npx tsc --noEmit 2>&1 | head -50
# 3. strict 関連のエラーを分類
npx tsc --noEmit 2>&1 | grep "implicitly has an 'any'" | wc -l
npx tsc --noEmit 2>&1 | grep "Object is possibly 'null'" | wc -l
# 4. 自動修正ツールを活用
npx ts-migrate migrate . # 自動的に型アノテーションを追加
// よく出るエラーと対処パターン
// ① noImplicitAny
// Error: Parameter 'x' implicitly has an 'any' type
function fn(x) { ... }
// → function fn(x: unknown) { ... } または適切な型に
// ② strictNullChecks
// Error: Object is possibly 'null'
const el = document.getElementById('app');
el.addEventListener(...); // ← エラー
// → el?.addEventListener(...) または if (el) { el.addEventListener(...) }
// ③ strictPropertyInitialization
class Service {
private client: HttpClient; // ← エラー: constructor で初期化していない
// → constructor(client: HttpClient) { this.client = client; }
// または → private client!: HttpClient; (明示的な非null表明)
}
まとめ
| 変更 | 内容 | 影響度 |
|---|---|---|
| strict デフォルト ON | 型エラーが新たに検出される | 高(既存コードに影響) |
| ESM デフォルト | モジュール解決が ESM 優先 | 中(CJS プロジェクトは設定要) |
| 副作用インポート検出 | import type の徹底が求められる | 低〜中 |
TypeScript 6.0 は「今まで見逃していた型の問題を表面化させる」リリースだ。短期的には型エラーへの対応コストがかかるが、これは TypeScript 7(Go リライト)が前提とする健全なコードベースへの必要なステップでもある。strict: true をすでに有効にしているプロジェクトへの影響は限定的なので、まず tsc --noEmit でエラー数を確認し、段階的に対応するのが現実的だ。