オーバーロード
TypeScript の関数オーバーロードを使用すると、1 つの関数名に対して複数の関数シグネチャを定義でき、複数の方法で呼び出せる関数を定義できます。例を次に示します。
// オーバーロードfunction sayHi(name: string): string;function sayHi(names: string[]): string[];
// 実装function sayHi(name: unknown): unknown { if (typeof name === 'string') { return `Hi, ${name}!`; } else if (Array.isArray(name)) { return name.map(name => `Hi, ${name}!`); } throw new Error('Invalid value');}
sayHi('xx'); // 有効sayHi(['aa', 'bb']); // 有効class 内で関数オーバーロードを使用する別の例を次に示します。
class Greeter { message: string;
constructor(message: string) { this.message = message; }
// オーバーロード sayHi(name: string): string; sayHi(names: string[]): ReadonlyArray<string>;
// 実装 sayHi(name: unknown): unknown { if (typeof name === 'string') { return `${this.message}, ${name}!`; } else if (Array.isArray(name)) { return name.map(name => `${this.message}, ${name}!`); } throw new Error('value is invalid'); }}console.log(new Greeter('Hello').sayHi('Simon'));