5
5

More than 5 years have passed since last update.

TypeScriptの関数オーバーロードの単純な例

Posted at

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)
}
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5