Ce face parametri opționali și impliciți
Un parametru marcat cu ? este opțional: apelul îl poate omite, iar în funcție valoarea lui este undefined. De aceea tipul lui în interiorul funcției este number | undefined și trebuie verificat înainte de folosire.
Un parametru cu valoare implicită (b: number = 10) este și el opțional, dar dacă lipsește (sau primește undefined) ia valoarea dată. În funcție are tipul simplu, fără undefined. Tipul poate lipsi: b = 10 deduce number.
Parametrii opționali stau după cei obligatorii. Cei cu valoare implicită pot sta oriunde, dar dacă sunt la mijloc, ca să folosești valoarea implicită trebuie să dai explicit undefined. Pentru multe opțiuni, un singur parametru obiect cu proprietăți opționale este mai ușor de folosit.
Exemple
Exemplul 1: Opțional și implicit
function salut(nume: string, titlu?: string): string {
return titlu ? `Bună ziua, ${titlu} ${nume}!` : `Salut, ${nume}!`;
}
function pret(suma: number, moneda = "lei", zecimale: number = 2): string {
return `${suma.toFixed(zecimale)} ${moneda}`;
}
console.log(salut("Ana"));
console.log(salut("Ionescu", "doamna"));
console.log(pret(12.5));
console.log(pret(12.5, "euro"));
console.log(pret(12.5, undefined, 0));
Rezultat
Salut, Ana!
Bună ziua, doamna Ionescu!
12.50 lei
12.50 euro
13 lei
Exemplul 2: Obiect cu opțiuni
Destructurarea cu valori implicite dă fiecărei opțiuni o valoare, iar apelul spune clar ce schimbă.
interface Optiuni {
separator?: string;
majuscule?: boolean;
}
function listeaza(elemente: string[], { separator = ", ", majuscule = false }: Optiuni = {}): string {
const text = elemente.join(separator);
return majuscule ? text.toUpperCase() : text;
}
const orase = ["Iași", "Cluj", "Brașov"];
console.log(listeaza(orase));
console.log(listeaza(orase, { separator: " / " }));
console.log(listeaza(orase, { majuscule: true }));
Rezultat
Iași, Cluj, Brașov
Iași / Cluj / Brașov
IAȘI, CLUJ, BRAȘOV
Exemplul 3: Parametrul opțional trebuie verificat
function lungime(text?: string): number {
return text.length;
}
console.log(lungime());
Eroarea afișată de tsc
exemplu.mts(2,12): error TS18048: 'text' is possibly 'undefined'.
Greșeli frecvente
- Pui un parametru opțional înaintea unuia obligatoriu:
f(a?: number, b: number). tsc dă A required parameter cannot follow an optional parameter. - Folosești
valoare || implicitîn loc de valoare implicită; un argument0sau""este înlocuit greșit.
Comenzi înrudite
funcții cu tipuri: Pui tipuri pe parametrii și pe rezultatul funcțiilor; fiecare apel este verificat la compilare.rest parameters: Strâng oricâte argumente într-un tablou: …valori: number[] acceptă f(1), f(1, 2, 3) sau f().null și undefined: Cu strictNullChecks, null și undefined sunt tipuri separate: o variabilă le acceptă doar dacă tipul ei le include.Partial: Partial<T> face toate proprietățile lui T opționale; util pentru actualizări în care trimiți doar ce se schimbă.