TypeScriptでは関数シグネチャのオーバーロードができる。次のように、シグネチャを列挙した上で、実装はひとつの関数にまとめる。
function 関数名(シグネチャA)
function 関数名(シグネチャB)
function 関数名(シグネチャC)
function 関数名(シグネチャA,B,Cどれにでも対応できるシグネチャ) {
そしてその実装
}
そのため、実装はif分岐が多くなる。もしもJavaのように実装を別々に書くことができればコードがすっきりするだろうが、TypeScriptにはまだそういう構文はない。
例えば、1個から3個までの数値を引数に、その合計値を計算する関数sum
をオーバーロードで書くと次のようになる:
function sum($1: number): number
function sum($1: number, $2: number): number
function sum($1: number, $2: number, $3: number): number
function sum($1: number, $2?: number, $3?: number): number {
return $1 + ($2 || 0) + ($3 || 0)
}
sum(1) //=> 1
sum(1, 2) //=> 3
sum(1, 2, 3) //=> 6
ちなみに、この例はオーバーロードで書くよりも、下記のような実装だけで十分ではある。
function sum($1: number, $2?: number, $3?: number): number {
return $1 + ($2 || 0) + ($3 || 0)
}