TypeScriptで関数オーバーロードを実現する

公開日 2024年12月26日
更新日 2024年12月26日
3 分で読める
TypeScript

TypeScriptでは、関数オーバーロードを使用することで、1つの関数に複数の署名を持たせることができます。これにより、同じ関数名でさまざまな引数や戻り値の型をサポートできます。以下に、TypeScriptで関数オーバーロードを使用する方法とベストプラクティスを2つの例を通じて紹介します。


例1:クラス内で関数オーバーロードを実現する

export class BookService {
  /**
   * IDで本を取得する
   * @param id 本のID
   * @returns 本
   */
  getBook(id: string): Book;

  /**
   * 条件で本を取得する
   * @param condition 本の条件
   * @returns 本のリスト
   */
  getBook(condition: { title?: string; publishTime?: Date }): Book[];

  public getBook(condition: string | { title?: string; publishTime?: Date }): Book | Book[] {
    if (typeof condition === 'string') {
      // IDで本を取得するロジック
      return {} as Book;
    }
    // 条件で本を取得するロジック
    return [{} as Book];
  }
}

例2:通常の関数で関数オーバーロードを使用する

/**
 * IDで本を取得する
 * @param id 本のID
 * @returns 本
 */
export function getBook(id: string): Book;

/**
 * 条件で本を取得する
 * @param condition 本の条件
 * @returns 本のリスト
 */
export function getBook(condition: { title?: string; publishTime?: Date }): Book[];

export function getBook(condition: string | { title?: string; publishTime?: Date }): Book | Book[] {
  if (typeof condition === 'string') {
    // IDで本を取得するロジック
    return {} as Book;
  }
  // 条件で本を取得するロジック
  return [{} as Book];
}

まとめ

TypeScriptで関数オーバーロードを使用することで、同じ目的の異なるシナリオに対応する便利な機能を提供できます。プロジェクトのニーズに応じて、クラス内での実装か、単独の関数オーバーロードを選択し、より効率的に対応することができます。

概要

技術的洞察、経験、思考を共有する個人ブログ

クイックリンク

お問い合わせ

  • Email: hushukang_blog@proton.me
  • GitHub

© 2025 CODE赤兎. 無断転載禁止