...rest: T[] 残余パラメータ

最終更新:2026-10-22

...rest: T[] 残余パラメータ

残余パラメータは ...名前 の形で「残りのすべての実引数」を真の配列(...scores: number[])として収集し、関数が任意個数の同型引数を受け取れるようにします。arguments の型安全な代替品です。

グループ関数とクラス
種類構文
strict モード不要

ℹ️ 説明 エディタは TypeScript を JavaScript にトランスパイルして実行します(型チェックなし)。型チェック結果は各サンプルの出力を参照してください。

📝 構文

function average(...scores: number[]): number {
  if (scores.length === 0) return 0;
  return scores.reduce((sum, s) => sum + s, 0) / scores.length;
}

// 位置引数 + レストパラメータ:レストパラメータは最後に置かなければならない
function logRequest(method: string, ...fields: string[]): void;

⚙️ パラメータ

...scores: number[]残余パラメータ:余ったすべての実引数が number[] に収集されます。パラメータリストの最後の項でなければなりません

戻り値:通常の関数と同様です。明示的に注釈するか、関数本体から推論します。残余パラメータ自体は戻り値の型付けルールを変えません。

▶ サンプル

下のコードを編集して「試す」を押すと、トランスパイル実行結果を確認できます:

出力:

84.3
97.5
0

(トランスパイル後の実行出力。average("90") はコンパイルエラーになります——残余パラメータの要素は number でなければなりません)

💡 ポイント

ℹ️ 説明 残余パラメータは実行時には本物の配列なので、map/filter/reduce を自由に使えます。古い arguments オブジェクト(配列風で型なし)よりはるかに安全です。
⚠️ 注意 ...args: any[] は要素の型情報をすべて失います。できるだけ具体的な要素型を書くか、ジェネリックなタプル ...args: T で型を位置ごとに保持してください。
💡 ヒント タプル型で残余パラメータを「定型化」できます。...args: [name: string, retries: number] は第1実引数が string、第2実引数が number でなければならないことを意味します。
ケースは今後追加予定です。

📚 関連チュートリアル

❓ よくある質問

Q ...scores: number[] と scores: number[] の違いは何ですか?
A 後者は「配列を1つ受け取るパラメータ」で、average([90, 85]) のように呼びます。前者は「任意個の数値実引数」を受け取り、average(90, 85) と直接書けます。呼び出し側がすでに配列を持っているなら、普通の配列パラメータのほうが扱いやすいでしょう。
Q 残余パラメータをパラメータリストの途中に置けますか?
A 置けません。必ず最後に置きます。「残余」とは後ろの実引数をすべて収集するという定義そのものであり、途中に置くとコンパイラが即座にエラーにします。
Q ジェネリックな残余パラメータは何の役に立ちますか?
A <T extends any[]>(...args: T) は実引数をタプル型 T として収集し、各位置の型をそのまま保持します。引数をそのまま転送する wrap/decorate のようなユーティリティを書く際の鍵となるテクニックです。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%