TypeScriptで可変長引数関数を使う

argumentsは型安全ではない

argumentsは型安全ではないため、以下のコードのtotalとnはいずれもanyになります。

const sum = function(){
	return Array.from(arguments).reduce((total, n) => total + n, 0)
}

また、上記の関数はTypeScriptの観点では引数をとらないため、以下のように呼び出すと型エラーになります。

sum(1,2,3,4) //Expected 0 arguments, but got 4.

レストパラメータを使う

それではどのようにTypeSciptで可変長引数関数を使うかというと、レストパラメータを使います。

const sum = function(...number: number[]){
	return number.reduce((total, n) => total + n, 0)
}

console.log(sum(1,2,3,4)) //10
console.log(sum(1,2,3,4,5)) //15

上記のように …number とします。

これで total と n は number であると推論されます。

レストパラメータのルール

レストパラメータを使うときは以下のルールがあります。

  • 関数は最大で一つのレストパラメータを持つことができる
  • レストパラメータは引数の最後でなくてはいけない

参考:

プログラミングTypeScript
――スケールするJavaScriptアプリケーション開発