Ce face rest parameters
Un rest parameter se scrie cu trei puncte în fața numelui și strânge toate argumentele rămase într-un tablou. Tipul lui este un tablou (number[]) sau un tuple, dacă vrei un număr fix de argumente cu tipuri diferite. Trebuie să fie ultimul parametru.
La apel, poți „desface” un tablou în argumente cu aceleași trei puncte: suma(...note). TypeScript verifică tipul elementelor. Dacă funcția așteaptă un tuple, tabloul trebuie să aibă tipul tuple (de exemplu marcat cu as const), nu un simplu number[].
Tipurile utilitare Parameters și rest parameters se combină des: (...args: Parameters<typeof f>) creează o funcție cu exact aceiași parametri ca f.
Exemple
Exemplul 1: Oricâte numere
function medie(...note: number[]): number {
if (note.length === 0) return 0;
return note.reduce((s, n) => s + n, 0) / note.length;
}
console.log(medie(9, 10));
console.log(medie(7, 8, 9, 10).toFixed(2));
console.log(medie());
const noteAna = [10, 9, 9];
console.log(medie(...noteAna).toFixed(2));
Rezultat
9.5
8.50
0
9.33
Exemplul 2: Parametru obligatoriu urmat de rest
function anunta(clasa: string, ...elevi: string[]): string {
return `${clasa}: ${elevi.length} elevi (${elevi.join(", ")})`;
}
console.log(anunta("a IX-a A", "Ana", "Mihai", "Ioana"));
console.log(anunta("a X-a B"));
Rezultat
a IX-a A: 3 elevi (Ana, Mihai, Ioana)
a X-a B: 0 elevi ()
Exemplul 3: Rest cu tuple și tabloul de tip greșit
Funcția așteaptă exact un text și un număr. Un (string | number)[] nu garantează asta.
function nota(materie: string, valoare: number): string {
return `${materie}: ${valoare}`;
}
const date = ["matematică", 9];
console.log(nota(...date));
Eroarea afișată de tsc
exemplu.mts(5,18): error TS2556: A spread argument must either have a tuple type or be passed to a rest parameter.
Greșeli frecvente
- Pui rest parameter înaintea altor parametri. tsc dă A rest parameter must be last in a parameter list.
- Desfaci un tablou obișnuit într-o funcție cu parametri ficși. Declară tabloul ca tuple (
as constsau[string, number]).
Comenzi înrudite
funcții cu tipuri: Pui tipuri pe parametrii și pe rezultatul funcțiilor; fiecare apel este verificat la compilare.tuple: Un tablou cu număr fix de elemente, în care fiecare poziție are tipul ei, de exemplu [nume, notă].Parameters: Parameters<F> dă tipurile parametrilor unei funcții, ca tuple; Parameters<F>[0] este primul parametru.parametri opționali și impliciți: Un parametru cu ? poate lipsi la apel (devine undefined); unul cu = valoare primește valoarea implicită.