Ce face readonly
Un câmp readonly poate primi valoare doar la declarare sau în constructor. După aceea, orice atribuire este eroare de compilare. Se folosește pentru date care nu trebuie să se schimbe: un id, o dată de creare, o configurație.
readonly funcționează și în interfețe și aliasuri de tip, și pe tablouri: readonly string[] interzice push, sort și atribuirea elementelor. Tipul utilitar Readonly<T> face toate proprietățile unui tip readonly deodată.
Ca și modificatorii de acces, readonly este verificat doar la compilare și este „superficial”: un câmp readonly care conține un obiect nu poate fi înlocuit, dar proprietățile obiectului se pot modifica. Pentru a bloca și la rulare există Object.freeze din JavaScript.
Exemple
Exemplul 1: Câmp readonly într-o clasă
class Comanda {
readonly id: number;
readonly creata = "2026-10-19";
produse: string[] = [];
constructor(id: number) {
this.id = id; // permis: în constructor
}
}
const c = new Comanda(101);
c.produse.push("pâine", "lapte");
console.log(c.id, c.creata, c.produse);
Rezultat
101 2026-10-19 [ 'pâine', 'lapte' ]
Exemplul 2: Modificare interzisă
interface Setari {
readonly limba: string;
readonly orase: readonly string[];
}
const s: Setari = { limba: "ro", orase: ["Iași"] };
s.limba = "en";
s.orase.push("Cluj");
console.log(s);
Eroarea afișată de tsc
exemplu.mts(6,3): error TS2540: Cannot assign to 'limba' because it is a read-only property.
exemplu.mts(7,9): error TS2339: Property 'push' does not exist on type 'readonly string[]'.
Exemplul 3: readonly este superficial
Câmpul adresa nu poate fi înlocuit, dar obiectul din el se poate modifica.
class Elev {
readonly adresa = { oras: "Iași", strada: "Copou" };
}
const e = new Elev();
e.adresa.oras = "Cluj"; // permis: se schimbă interiorul obiectului
console.log(e.adresa);
Rezultat
{ oras: 'Cluj', strada: 'Copou' }
Greșeli frecvente
- Crezi că
readonlyface obiectul înghețat. Doar proprietatea marcată nu se poate reatribui; pentru tot obiectul foloseșteReadonly<T>sauas const, la compilare, șiObject.freezela rulare. - Confunzi
readonlycuconst:consteste pentru variabile,readonlypentru proprietăți.
Comenzi înrudite
Readonly: Readonly<T> face toate proprietățile lui T readonly: obiectul poate fi citit, dar nu modificat.as const: Face un literal complet readonly și păstrează valorile exacte ca tipuri: „Iași” în loc de string.array (T[] și Array<T>): Tipul tablourilor: T[] și Array<T> înseamnă același lucru, un tablou cu elemente de tipul T.class: Clasele din JavaScript, cu tipuri pe câmpuri, constructor și metode, plus modificatori de acces și interfețe.let și const cu tipuri: Declari variabile cu let (se pot schimba) sau const (nu se pot reatribui) și le pui tipul după două puncte.