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