Ce face Required
Required<T> este opusul lui Partial: scoate ? de pe toate proprietățile, iar undefined dispare din tipul lor. Un Required<Optiuni> trebuie să aibă toate proprietățile.
Situația tipică: o funcție primește opțiuni parțiale de la utilizator, le completează cu valori implicite și lucrează mai departe cu un obiect complet. Tipul obiectului complet este Required<Optiuni>, deci în restul codului nu mai verifici undefined.
Folosește modificatorul -? al mapped types. Ca toate tipurile utilitare de acest fel, acționează doar la primul nivel.
Parametri
| Parametru | Descriere |
|---|---|
T |
Tipul obiect ale cărui proprietăți devin obligatorii. |
Ce returnează
Un tip obiect cu aceleași chei ca T, toate obligatorii.
Exemple
Exemplul 1: Opțiuni completate cu valori implicite
interface Optiuni {
titlu?: string;
pagina?: number;
pePagina?: number;
}
function completeaza(o: Optiuni): Required<Optiuni> {
return { titlu: "Catalog", pagina: 1, pePagina: 20, ...o };
}
const c = completeaza({ pagina: 3 });
const start = (c.pagina - 1) * c.pePagina; // nu mai e nevoie de verificări
console.log(c, "primul elev:", start + 1);
Rezultat
{ titlu: 'Catalog', pagina: 3, pePagina: 20 } primul elev: 41
Exemplul 2: Proprietate lipsă
interface Optiuni {
titlu?: string;
pagina?: number;
}
const o: Required<Optiuni> = { titlu: "Catalog" };
console.log(o);
Eroarea afișată de tsc
exemplu.mts(5,7): error TS2741: Property 'pagina' is missing in type '{ titlu: string; }' but required in type 'Required<Optiuni>'.
Greșeli frecvente
- Crezi că
Requiredscoate șiundefinedscris explicit în tip (x: number | undefined). Scoate doar opționalitatea dată de?; pentru restul foloseșteNonNullable.
Comenzi înrudite
Partial: Partial<T> face toate proprietățile lui T opționale; util pentru actualizări în care trimiți doar ce se schimbă.NonNullable: NonNullable<T> elimină null și undefined din tipul T.Readonly: Readonly<T> face toate proprietățile lui T readonly: obiectul poate fi citit, dar nu modificat.mapped types: Construiesc un tip nou trecând prin fiecare cheie a altui tip: { [K in keyof T]: … }.