0Pricing
TypeScript Academy · Lezione

Proprietà readonly

Contrassegni le proprietà degli oggetti come immutabili dopo l’inizializzazione.

Proprietà readonly è una lezione TypeScript Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento TypeScript Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso TypeScript Academy include 4 lezioni in totale.

Il modificatore readonly

Il modificatore readonly contrassegna una proprietà che può essere impostata una sola volta, ma non riassegnata in seguito. Esprime l'immutabilità a livello di tipo e aiuta a prevenire modifiche accidentali.

interface Point {
  readonly x: number;
  readonly y: number;
}
const p: Point = { x: 1, y: 2 };
console.log(p.x, p.y);
// p.x = 5; // Error: cannot assign to readonly property

readonly nelle interfacce

In un'interfaccia, readonly documenta quali campi sono fissi dopo la creazione. Chi utilizza l'interfaccia può leggerli liberamente, ma il compilatore impedisce qualsiasi riassegnazione.

interface Config {
  readonly env: string;
  retries: number; // mutable
}
const c: Config = { env: 'prod', retries: 3 };
c.retries = 5; // allowed
console.log(c.env, c.retries);

Errore di compilazione in caso di riassegnazione

Il tentativo di scrivere in una proprietà readonly genera un errore in fase di compilazione. In questo modo viene rilevata un'intera categoria di bug in cui lo stato condiviso viene modificato in modo imprevisto.

interface User {
  readonly id: number;
  name: string;
}
const u: User = { id: 1, name: 'Ada' };
u.name = 'Grace'; // ok
// u.id = 2; // Error
console.log(u);

readonly nelle proprietà delle classi

Anche le classi supportano readonly. Un campo readonly può essere inizializzato nella dichiarazione o all'interno del costruttore, ma in nessun altro punto.

class Circle {
  readonly radius: number;
  constructor(r: number) {
    this.radius = r; // allowed in constructor
  }
}
const c = new Circle(5);
console.log(c.radius);

Impostazione una tantum nel costruttore

Il costruttore è l'unico punto, oltre alla dichiarazione, in cui è possibile assegnare un campo readonly. Dopo la costruzione, il valore rimane bloccato per tutta la durata dell'oggetto.

class Account {
  readonly owner: string;
  constructor(owner: string) {
    this.owner = owner;
  }
  rename() {
    // this.owner = 'x'; // Error: readonly outside constructor
  }
}
console.log(new Account('Sam').owner);

Proprietà dei parametri readonly

Le proprietà dei parametri di TypeScript consentono di dichiarare e inizializzare un campo readonly direttamente nella firma del costruttore, riducendo il codice ripetitivo.

class Vector {
  constructor(
    readonly x: number,
    readonly y: number
  ) {}
}
const v = new Vector(3, 4);
console.log(v.x, v.y);

readonly esiste solo in fase di compilazione

È fondamentale capire che readonly esiste solo nel sistema dei tipi. Viene rimosso durante l'esecuzione: JavaScript non ne ha alcun concetto. Impedisce la riassegnazione nel codice TypeScript, ma non nell'output compilato raggiunto attraverso percorsi privi di tipi.

interface Box { readonly value: number; }
const b: Box = { value: 10 };
// At runtime b is a plain object; readonly is not enforced by JS.
console.log(b.value);

readonly e const

Non li confonda. const impedisce di riassegnare una variabile. readonly impedisce di riassegnare una proprietà. Un oggetto const può comunque avere proprietà modificabili, a meno che non siano readonly.

const obj = { count: 0 }; // const binding
obj.count = 5; // allowed: property is mutable
console.log(obj.count);

Per sua natura, superficiale

readonly è superficiale: protegge la proprietà in sé, non il contenuto dell'oggetto o dell'array a cui fa riferimento. Un riferimento readonly a un oggetto consente comunque di modificare i campi dell'oggetto.

interface Holder { readonly data: { n: number }; }
const h: Holder = { data: { n: 1 } };
// h.data = {...}; // Error
h.data.n = 99; // allowed: inner field is not readonly
console.log(h.data.n);

Usare readonly per API più sicure

Contrassegnare come readonly i campi degli oggetti restituiti segnala ai chiamanti che non dovrebbero modificarli. L'intento viene codificato nel tipo, trasformando un uso improprio in un errore di compilazione anziché in un bug silenzioso.

interface Snapshot { readonly takenAt: number; readonly size: number; }
function snapshot(): Snapshot {
  return { takenAt: Date.now(), size: 1024 };
}
const s = snapshot();
console.log(s.size);

readonly nelle firme di indice

È persino possibile rendere readonly le firme di indice, ottenendo un tipo simile a una mappa le cui voci possono essere lette, ma non riassegnate tramite l'indice.

interface Scores {
  readonly [name: string]: number;
}
const scores: Scores = { ada: 95, sam: 88 };
console.log(scores.ada);
// scores.ada = 100; // Error

Verifica rapida

Verifichi la Sua comprensione delle proprietà readonly.

Riepilogo: proprietà readonly

Ha imparato che readonly:

  • consente di impostare una proprietà una sola volta, quindi ne impedisce la riassegnazione.
  • può essere impostato nella dichiarazione o nel costruttore per i campi delle classi.
  • esiste solo in fase di compilazione ed è superficiale: non congela in profondità i dati annidati.
  • è diverso da const: il primo protegge le proprietà, il secondo protegge i binding delle variabili.

Ora analizziamo gli array e le tuple readonly.

interface Meta { readonly id: number; }
const m: Meta = { id: 42 };
console.log(m.id);

Domande Frequenti

La lezione «Proprietà readonly» è gratuita?

Sì — il testo completo di «Proprietà readonly» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso TypeScript Academy, passa a CoddyKit PRO. Il corso TypeScript Academy include 4 lezioni in totale.

Cosa imparerò in «Proprietà readonly»?

Contrassegni le proprietà degli oggetti come immutabili dopo l’inizializzazione. Eserciti TypeScript Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare TypeScript Academy?

Non è richiesta alcuna esperienza precedente. TypeScript Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Proprietà readonly»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione TypeScript Academy?

Sì. Ogni lezione TypeScript Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Proprietà readonly
  2. Array e tuple readonly
  3. ReadonlyArray e ReadonlyMap
  4. Pattern di immutabilità profonda
← Torna a TypeScript Academy