TypeScript 5.8
目次
TypeScript 5.8 の新機能と変更点
TypeScript 5.8 が 2025年2月28日に発表されました。本記事では、新機能や変更点を分かりやすく解説します。
1. return 式内の分岐に対する詳細な型チェック
TypeScript 5.8 では、return
文の直内にある条件式の各分岐を 個別にチェック するようになりました。
✅ 変更前(バグが見逃される)
declare const untypedCache: Map<any, any>; function getUrlObject(urlString: string): URL { return untypedCache.has(urlString) ? untypedCache.get(urlString) : urlString; }
このコードの意図は、キャッシュがあれば URL
を返し、なければ新しい URL
を作成することですが、誤って string
を返しています。従来はこのバグが検出されませんでした。
✅ 変更後(バグが検出される)
declare const untypedCache: Map<any, any>; function getUrlObject(urlString: string): URL { return untypedCache.has(urlString) ? untypedCache.get(urlString) : urlString; // エラー: Type 'string' is not assignable to type 'URL'. }
各分岐の型が個別にチェックされるため、型エラーを適切に検出できます。
2. Node.js ESM の require()
サポート
Node.js 22 から CommonJS から ESM を require()
で読み込むことが可能 になりました。
TypeScript 5.8 では、--module nodenext
でこの動作をサポートします。
✅ 例
// CommonJS ファイル const myModule = require("./my-esm-module.js");
以前は require()
で ESM を読み込むとエラーでしたが、Node.js 22 以降では可能になり、TypeScript もこれをサポートします。
🔹 注意点
import
の場合と異なり、トップレベルのawait
を含む ESM ファイル はrequire()
で読み込めません。- 古い Node.js では
--module node16
かnode18
を使用 する必要があります。
3. --erasableSyntaxOnly
オプション
Node.js 23.6 では、型情報を削除した TypeScript を直接実行する機能 (--experimental-strip-types
) が導入されました。
TypeScript 5.8 では、このモードを 事前にチェックする --erasableSyntaxOnly
フラグを追加しました。
✅ サポートされない構文
// ❌ サポートされない構文(エラー) enum Direction { Up, Down, Left, Right } namespace container { export const value = 42; } import Bar = container.value;
エラー: ランタイムで意味を持つ TypeScript の構文 (enum
, namespace
, import =
など) を使用すると、チェック時にエラーが出ます。
4. 新しい --module node18
フラグ
TypeScript 5.8 では、Node.js 18 固有の動作を固定する --module node18
を導入しました。
🔹 node18
と nodenext
の違い
フラグ | ESM の | インポートアサーション |
---|---|---|
| ❌ できない | ✅ 許可される |
| ✅ できる | ❌ 非推奨 |
Node.js 18 を使うプロジェクトでは --module node18
を設定すると、Node.js 18 の仕様に合わせた型チェック が行われます。
5. --libReplacement
フラグ
TypeScript 5.8 では、カスタム lib
ファイルの検索を無効化 する --libReplacement
フラグを追加しました。
✅ 背景
TypeScript 4.5 以降、デフォルトの lib
をカスタムバージョンに置き換えられるようになりました。
{ "devDependencies": { "@typescript/lib-dom": "npm:@types/web@0.0.199" } }
しかし、TypeScript は lib
の変更を常に監視していたため、パフォーマンスの問題がありました。
🔹 改善点
{ "compilerOptions": { "libReplacement": false // カスタム lib の検索を無効化 } }
これにより、node_modules
の監視を減らし、パフォーマンスが向上します。
6. プログラムのロードと更新の最適化
TypeScript 5.8 では、パスの正規化やオプションの再検証を最適化 し、ビルド時間や --watch
モードのレスポンスを改善しました。
✅ 最適化のポイント
- パスの正規化処理の最適化
→path.split("/")
を減らし、直接インデックス操作することで負荷軽減。 - 不要なオプションの再検証をスキップ
→tsconfig.json
の内容が変更されない限り、毎回のチェックを省略。
🔹 結果
✅ ビルド時間が短縮
✅ エディターの型チェックの応答性が向上
まとめ
TypeScript 5.8 は、型チェックの厳格化、Node.js 最新バージョンの対応、パフォーマンス改善 など、開発者にとってメリットの多いアップデートです。
📌 次のステップ
- TypeScript 5.8 の公式発表 を読む
npm install typescript@latest
で最新バージョンを試す- プロジェクトの型チェックを改善し、Node.js の最新機能を活用しよう! 🚀