Featured image of post TypeScript 5系の実戦的機能とベストプラクティス Featured image of post TypeScript 5系の実戦的機能とベストプラクティス

TypeScript 5系の実戦的機能とベストプラクティス

TypeScript 5.xシリーズで追加された新機能の中から、実際のプロダクト開発で役立つものをピックアップして解説します。

フロントエンドおよびバックエンド開発で業界標準となった TypeScript

現在主流であるTypeScript 5.xシリーズでは、言語仕様の拡張に加えて、コンパイラの動作速度向上やモジュール解決の最適化など、開発体験(DX)を大きく向上させるアップデートが数多く含まれています。本記事では、日常のコーディングで役立つ5系の実戦的な新機能とベストプラクティスを解説します。


1. const 型パラメータ (Const Type Parameters)

これまで、オブジェクトのリテラルを引数として渡す際、そのプロパティの型を as const を付けたかのように厳密なリテラル型(Readonly型)として推論させるには、呼び出し側で記述する必要がありました。

TypeScript 5.0からは、ジェネリクスの型パラメータの前に const 修飾子を付与することで、呼び出し側が as const を書かなくても自動的に読み取り専用の厳密なリテラル型として推論されるようになりました。

// const 修飾子をジェネリクス型引数Tの前に指定
function getNames<const T extends { names: readonly string[] }>(obj: T) {
    return obj.names;
}

// 呼び出し側で as const を書かなくても、names は ["Alice", "Bob"] というリテラル型として推論される
const names = getNames({ names: ["Alice", "Bob"] });
// 推論される型: readonly ["Alice", "Bob"]

設定値の配列や、固定のキーマッピングなどを関数に渡す際の安全性とコードの簡潔さが向上します。


2. 標準ECMAScript準拠のデコレータ (Decorators)

実験的機能として長年 experimentalDecorators フラグでサポートされていたデコレータ機能が、ECMAScript(JavaScript)の最新仕様に完全に準拠した形で正式リリースされました。

NestJSや各種ORMなどのフレームワークでよく使われていたクラスやメソッドのカスタマイズが、追加設定なしで標準的に記述できます。

function logMethod(originalMethod: any, context: ClassMethodDecoratorContext) {
    const methodName = String(context.name);
    
    function replacementMethod(this: any, ...args: any[]) {
        console.log(`[LOG] Calling ${methodName} with`, args);
        return originalMethod.apply(this, args);
    }
    return replacementMethod;
}

class UserService {
    @logMethod
    greet(name: string) {
        return `Hello, ${name}!`;
    }
}

3. 設定ファイルの多重継承 (extends 配列サポート)

tsconfig.json の設定を別ファイルから継承する際、以前は1つのファイルしか継承できませんでした。TypeScript 5.0以降は、extends に配列形式で複数の設定ファイルを指定できるようになりました。

これにより、「基本設定」「ベースモジュール設定」「本番環境用の上書き設定」といった役割別のコンフィグ共有が格段にやりやすくなりました。

{
  "extends": ["./tsconfig.base.json", "./tsconfig.paths.json"],
  "compilerOptions": {
    "strict": true
  }
}

4. まとめ:コンパイルパフォーマンスの恩恵

TypeScript 5系は、コード構造を完全にリファクタリングしてデータ構造のスリム化を図ったため、**コンパイル速度が大幅に向上(プロジェクト規模によっては最大30%〜40%高速化)**しています。最新バージョンを導入するだけで、ローカル開発やCI/CDパイプラインの待ち時間を削減できるため、積極的なアップデートをお勧めします。