...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 のようなユーティリティを書く際の鍵となるテクニックです。