Acești modificatori de proprietate controlează dacă o proprietate este obligatorie și dacă poate fi reatribuită.
Opțional (?)
ts
{
: ;
?: ;
}
: = { : };
: = { : , : };
() {
u..;
u.?.;
}
Acești modificatori de proprietate controlează dacă o proprietate este obligatorie și dacă poate fi reatribuită.
?) {
: ;
?: ;
}
: = { : };
: = { : , : };
() {
u..;
u.?.;
}
O proprietate opțională are tipul T | undefined, deci compilatorul te forțează să gestionezi cazul absent — prevenind erorile «cannot read property of undefined».
interface Point { readonly x: number; readonly y: number; }
const p: Point = { x: 1, y: 2 };
p.x = 5; // ❌ Error: cannot assign to readonly property
// arrays too
const nums: readonly number[] = [1, 2, 3];
nums.push(4); // ❌ push doesn't exist on readonly array
readonly este doar la timp de compilare (fără impunere la runtime), dar documentează și impune imutabilitate în sistemul de tipuri, capturând mutații accidentale.
interface Config { readonly id: string; tags?: readonly string[]; }
type Frozen = Readonly<User>; // utility type makes ALL props readonly
? modelează date cu adevărat opționale și forțează siguranța null; readonly exprimă și impune imutabilitate (excelent pentru config, props și prevenirea mutării accidentale a stării).
Ambele împing verificarea corectitudinii în compilator.