雑多なブログ

音楽や語学、プログラム関連の話題について書いています

Typescript: 関数のオーバーロード

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))

シグネチャーの宣言と実装を別々に定義する。
そして、個々のパラメーターの判定は関数の内部で行う。

個人的には関数の実装内部でパラメーターを判定して分岐させる必要がある点が気持ち悪く感じる。他の言語の関数のオーバーロードはこんな風にややこしい書き方はしていないと思う。