Typescriptには関数をオーバーロードする事できる。
最初にオーバーロードを使わず個別に関数を定義してみる。
function multipleValue(value: number): number { return value * 2 } console.log(multipleValue(5)) function multipleValue2(value: string): string { return value + value } console.log(multipleValue2('Hello'))
次に関数のオーバーロードで実装してみる。
function multipleValue(value: number): number function multipleValue(value: string): string function multipleValue(value: any): any { if (typeof(value) === 'number') { return value * 2 } else if (typeof(value) === 'string') { return value + value } } console.log(multipleValue('Hello')) console.log(multipleValue(22))
シグネチャーの宣言と実装を別々に定義する。
そして、個々のパラメーターの判定は関数の内部で行う。
個人的には関数の実装内部でパラメーターを判定して分岐させる必要がある点が気持ち悪く感じる。他の言語の関数のオーバーロードはこんな風にややこしい書き方はしていないと思う。