ProgrammazioneSviluppatore Frontend

Parlami della parola chiave 'readonly' in TypeScript. Come e quando dovrebbe essere applicata? Quali sono le sue caratteristiche rispetto a const?

Supera i colloqui con l'assistente IA Hintsage

Risposta.

La parola chiave readonly in TypeScript viene utilizzata per le proprietà degli oggetti e degli array, per vietare la loro modifica dopo l'inizializzazione:

  • Viene utilizzata nella descrizione di interfacce, tipi e classi per impedire che il valore di un campo venga modificato dopo che è stato impostato.
  • readonly si applica solo alle proprietà degli oggetti, e non alle variabili.
  • A differenza di const, che indica che una variabile non può essere riassegnata, ma non impedisce di modificare il contenuto di un oggetto, readonly vieta proprio la modifica del campo o dell'elemento dell'array.

Esempio:

interface User { readonly id: number; name: string; } const user: User = { id: 1, name: 'Anna' }; user.id = 2; // Errore: Impossibile assegnare a 'id' perché è una proprietà di sola lettura.

Per gli array:

const nums: readonly number[] = [1, 2, 3]; nums.push(4); // Errore: La proprietà 'push' non esiste sul tipo 'readonly number[]'.

Domanda insidiosa.

Qual è la differenza tra const e readonly in TypeScript? Possono sostituirsi a vicenda?

Risposta: No, non possono. const è una restrizione sulla variabile stessa (non può essere riassegnata), mentre readonly è una restrizione su singole proprietà di un oggetto o elementi di un array, ma la variabile stessa può essere modificata (se consentito dal contesto).

Esempio:

const arr: readonly number[] = [1, 2, 3]; // arr = [2, 3, 4]; // Errore a causa di const // arr[0] = 5; // Errore a causa di readonly

Storia

In un progetto per una piattaforma finanziaria, durante il lavoro con i dati degli utenti, sono stati utilizzati array normali number[] invece di readonly number[]. A causa di ciò, una funzione ha inavvertitamente modificato i dati in ingresso — i valori delle somme negli array venivano utilizzati in diversi luoghi, portando a discrepanze nei rapporti. L'errore è stato scoperto dopo alcuni giorni, il che è costato all'azienda tempo per audit e recupero dei dati.


Storia

Nell'API interna, si sono confusi const e readonly, pensando che const user: User avrebbe impedito la modifica dei campi. Di conseguenza, è stato possibile modificare i campi dell'oggetto, anche se ciò non è consentito dal progetto. A causa della mancanza di conoscenza della differenza, si sono verificate perdite di dati riservati tra i servizi.


Storia

All'interno di una libreria open source, una delle strutture dati è stata accidentalmente resa modificabile, perché è stata dimenticata la parola readonly nella definizione dell'interfaccia. Questo ha consentito a sviluppatori esterni di modificare dati privati in fase di esecuzione, causando bug che hanno richiesto refactoring per essere risolti.