TypeScript 6.0の新機能
TypeScript 6.0は典型的な機能リリースではありません。新しい構文や劇的な型システムの変更を期待してアップグレードすると、驚くことになるでしょう。このリリースは主に、デフォルト設定の近代化、レガシーな負債の削除、そしてTypeScript 7.0(コンパイラとツーリングのGoによるネイティブ移植版)に向けたエコシステムの準備に焦点を当てています。何が変わり、なぜ変わったのかを理解することで、アップグレード後のデバッグ時間を大幅に節約できます。
重要なポイント
- TypeScript 6.0はブリッジリリースです。JavaScriptベースのコンパイラで構築された最後のバージョンであり、ネイティブなTypeScript 7.0系列の到来前に、デフォルト設定と非推奨項目を整理することを目的としています。
- いくつかのコンパイラデフォルト設定が変更されました。
strict: true、module: "esnext"、現在es2025に解決される可変のtarget、types: []、およびnoUncheckedSideEffectImports: trueが含まれます。tsconfigが暗黙的な動作に依存していた場合、ビルドエラーが発生する可能性があります。 - 新しいプラットフォーム機能には、
es2025ターゲット、Temporal APIの型定義、RegExp.escape、Map.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— 文字列内の特殊な正規表現文字を安全にエスケープTemporalAPI —Dateの現代的な代替、esnextまたはtemporal.esnextで型定義Map.getOrInsertとMap.getOrInsertComputed—MapとWeakMapのためのよりクリーンなアップサートパターン、esnextを通じて利用可能
// 以前:冗長なMapアップサートパターン
if (!map.has("key")) map.set("key", defaultValue)
const value = map.get("key")
// 以後:クリーンで簡潔
const value = map.getOrInsert("key", defaultValue)
DOM型の統合
dom.iterableとdom.asynciterableは、ベースのdomライブラリにマージされました。tsconfig.jsonで個別にリストする必要はもうありません。"lib": ["dom", "dom.iterable"]を使用していた場合、"lib": ["dom"]だけに簡略化できます。
#/で始まるサブパスインポート
TypeScriptは、#/プレフィックスを使用したNode.jsのサブパスインポートをサポートするようになりました。これはpackage.jsonのimportsフィールドにクリーンにマップされ、バンドラーユーザーがすでに慣れ親しんでいるエイリアスパターンに非常に近い感覚になります。
Discover how at OpenReplay.com.
TypeScript 6.0の破壊的変更:実際にプロジェクトを壊すもの
ここがTypeScript 6.0移行作業の大部分を占める場所です。いくつかのコンパイラデフォルト設定が変更されました。
| 設定 | TypeScript 6.0のデフォルト |
|---|---|
strict | true |
module | esnext |
target | 現在サポートされているESバージョン(現在はes2025) |
types | [](空) |
rootDir | tsconfigディレクトリ |
noUncheckedSideEffectImports | true |
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 classic→nodenextまたはbundlerに移行--module amd、umd、systemjs、none--baseUrl→ プレフィックスをpathsエントリに直接移動--outFile→ esbuild、Vite、Rollupなどのバンドラーを使用esModuleInterop: falseとallowSyntheticDefaultImports: 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.