SJ blog
tools
A

信頼度ランク

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 にしない
strictNullChecksnull / undefined を型として明確に扱う
strictFunctionTypes関数型の反変チェック
strictBindCallApplybind/call/apply の型チェック
strictPropertyInitializationクラスプロパティの初期化保証
noImplicitThisthis の型を明示
useUnknownInCatchVariablescatch 節の変数を 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 でエラー数を確認し、段階的に対応するのが現実的だ。


参考リンク