Back

TypeScript 6.0の新機能

TypeScript 6.0の新機能

TypeScript 6.0は典型的な機能リリースではありません。新しい構文や劇的な型システムの変更を期待してアップグレードすると、驚くことになるでしょう。このリリースは主に、デフォルト設定の近代化、レガシーな負債の削除、そしてTypeScript 7.0(コンパイラとツーリングのGoによるネイティブ移植版)に向けたエコシステムの準備に焦点を当てています。何が変わり、なぜ変わったのかを理解することで、アップグレード後のデバッグ時間を大幅に節約できます。

重要なポイント

  • TypeScript 6.0はブリッジリリースです。JavaScriptベースのコンパイラで構築された最後のバージョンであり、ネイティブなTypeScript 7.0系列の到来前に、デフォルト設定と非推奨項目を整理することを目的としています。
  • いくつかのコンパイラデフォルト設定が変更されました。strict: truemodule: "esnext"、現在es2025に解決される可変のtargettypes: []、およびnoUncheckedSideEffectImports: trueが含まれます。tsconfigが暗黙的な動作に依存していた場合、ビルドエラーが発生する可能性があります。
  • 新しいプラットフォーム機能には、es2025ターゲット、Temporal APIの型定義、RegExp.escapeMap.getOrInsert、および統合されたDOMライブラリエントリが含まれます。
  • --moduleResolution node(古いnode10の動作)、--target es5、古いモジュール形式など、複数のレガシーオプションがTypeScript 7.0への移行のために非推奨となりました。後で苦痛を伴う移行を避けるため、今すぐ対処してください。

TypeScript 6.0はブリッジリリースであり、機能追加リリースではない

TypeScript 6.0は、JavaScriptコードベースで構築された最後のバージョンとして意図的に位置づけられています。TypeScript 7.0は、はるかに高速なビルドとエディタパフォーマンスを持つ、Goベースのネイティブ後継版になると予想されています。TypeScript 6.0は、その移行が起こる前に基盤を整理します。

実用的な意味合い:TypeScript 6.0の変更のほとんどは、新しい言語機能ではなく、設定のデフォルトと非推奨項目に関するものです。プロジェクトがレガシーなtsconfigオプションを蓄積してきた場合、今がそれらに対処する時です。

TypeScript 6.0の新機能:プラットフォーム対応機能

移行に焦点を当てているにもかかわらず、TypeScript 6.0は最新のJavaScript APIに対する意味のあるサポートを追加しています。

ES2025ターゲットと新しい組み込み型

TypeScript 6.0は、有効な--targetおよび--lib値としてes2025を追加します。これにはRegExp.escapeのようなAPIの組み込み型が含まれ、また一部の宣言をesnextからes2025に移動します。

また、esnextを通じて公開される新しいAPIの組み込み型も追加されます:

  • RegExp.escape — 文字列内の特殊な正規表現文字を安全にエスケープ
  • Temporal APIDateの現代的な代替、esnextまたはtemporal.esnextで型定義
  • Map.getOrInsertMap.getOrInsertComputedMapWeakMapのためのよりクリーンなアップサートパターン、esnextを通じて利用可能
// 以前:冗長なMapアップサートパターン
if (!map.has("key")) map.set("key", defaultValue)
const value = map.get("key")

// 以後:クリーンで簡潔
const value = map.getOrInsert("key", defaultValue)

DOM型の統合

dom.iterabledom.asynciterableは、ベースのdomライブラリにマージされました。tsconfig.jsonで個別にリストする必要はもうありません。"lib": ["dom", "dom.iterable"]を使用していた場合、"lib": ["dom"]だけに簡略化できます。

#/で始まるサブパスインポート

TypeScriptは、#/プレフィックスを使用したNode.jsのサブパスインポートをサポートするようになりました。これはpackage.jsonimportsフィールドにクリーンにマップされ、バンドラーユーザーがすでに慣れ親しんでいるエイリアスパターンに非常に近い感覚になります。

TypeScript 6.0の破壊的変更:実際にプロジェクトを壊すもの

ここがTypeScript 6.0移行作業の大部分を占める場所です。いくつかのコンパイラデフォルト設定が変更されました。

設定TypeScript 6.0のデフォルト
stricttrue
moduleesnext
target現在サポートされているESバージョン(現在はes2025)
types[](空)
rootDirtsconfigディレクトリ
noUncheckedSideEffectImportstrue

types: []の変更は最も影響が大きいものの一つです。以前は、TypeScriptはnode_modules/@types内のすべてのパッケージを自動的に含めていました。今では、デフォルトで何も含めません。@types/node@types/jest、または同様のパッケージのグローバルに依存しているプロジェクトでは、次のようなエラーが表示されます:

Cannot find name 'process'. Try adding 'node' to the types field in your tsconfig.

明示的に修正してください:

{
  "compilerOptions": {
    "types": ["node", "jest"]
  }
}

rootDirの変更も一般的です。出力ファイルが突然dist/index.jsではなくdist/src/index.jsに表示される場合は、tsconfigに"rootDir": "./src"を追加してください。

もう一つ注目すべき変更はnoUncheckedSideEffectImports: trueです。コードベースにタイプミスや不安定な解決を伴う副作用のみのインポートがある場合、TypeScript 6.0はそれらをフラグする可能性が高くなります。

TypeScript 6.0の非推奨項目:TypeScript 7の前に削除すべきもの

これらのオプションは、TypeScript 7.0への移行のために6.0で非推奨となり、いくつかの古い動作はすでに削除されています:

  • --target es5(サポートされる最低ターゲットはES2015になりました)
  • --moduleResolution node / --moduleResolution classicnodenextまたはbundlerに移行
  • --module amdumdsystemjsnone
  • --baseUrl → プレフィックスをpathsエントリに直接移動
  • --outFileesbuildViteRollupなどのバンドラーを使用
  • esModuleInterop: falseallowSyntheticDefaultImports: false
  • レガシーなmodule Foo {}名前空間構文 → namespace Foo {}を使用
  • assert構文のインポート → withに置き換え

tsconfigで"ignoreDeprecations": "6.0"を使用して非推奨警告を一時的に抑制できますが、これは短期的な応急処置として扱うべきです。

TypeScript 6.0へのアップグレード

現在の6.0リリース候補を次のコマンドでインストールします:

npm install -D typescript@rc

tsc --noEmitを実行し、エラーに対処してください。ほとんどの問題は、types配列、rootDir、副作用インポート、および非推奨オプションから発生します。

まとめ

TypeScript 6.0はクリーンアップリリースであり、機能ショーケースではありません。その目的は、レガシーなデフォルト設定を廃止し、コンパイラを最新のJavaScriptに合わせ、ネイティブなTypeScript 7.0系列の基盤を準備することです。これらの移行変更(更新されたtypes配列、明示的なrootDir値、副作用インポートの問題、非推奨オプションの置き換え)に早く対処するほど、TypeScript 7.0への道のりはスムーズになります。

TypeScriptチームからの完全な技術的詳細が必要な場合は、公式のTypeScript 6.0 RC発表も参照してください。

よくある質問

tsconfigが暗黙的なデフォルトに依存していた場合、おそらく壊れます。最も一般的な破損は、typesフィールドが空の配列にデフォルト設定されること、rootDirがtsconfigディレクトリを指すようになること、副作用インポートのより厳格な処理から発生します。変更を加える前に、アップグレード後にtsc --noEmitを実行してすべてのエラーを表面化させてください。

TypeScript 6.0は、元のJavaScriptベースのコンパイラで構築された最終リリースです。デフォルト設定のクリーンアップとレガシーオプションの非推奨化に焦点を当てています。TypeScript 7.0は、はるかに高速なビルドとエディタツーリングを備えた、Goベースのネイティブ後継版になると予想されています。バージョン6.0は、その移行のための準備ステップです。

はい。TypeScript 6.0の古いnode解決モードは、レガシーなnode10スタイルの動作を指し、非推奨となっており、classicも削除されました。プロジェクトがNode.jsで直接実行される場合はnodenextを使用し、Vite、Webpack、Bun、esbuildなどのツールでモジュールを解決およびバンドルする場合はbundlerを使用してください。

できますが、esnextが望ましくない場合は、通常moduleオプションを明示的に設定する必要があります。プロジェクトがまだCommonJSを出力している場合は、tsconfigでmoduleをcommonjsとして指定してください。ただし、TypeScript 6.0は明らかに現代のESMファーストワークフローを優遇しているため、可能な限り最新のモジュール設定への移行を検討してください。

Complete picture for complete understanding

Capture every clue your frontend is leaving so you can instantly get to the root cause of any issue with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data.

Check our GitHub repo and join the thousands of developers in our community.

OpenReplay