ProgrammierungFrontend-Entwickler

Erzählen Sie über das Schlüsselwort 'readonly' in TypeScript. Wie und wann sollte es angewendet werden? Was sind seine Besonderheiten im Vergleich zu const?

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort.

Das Schlüsselwort readonly in TypeScript wird für Eigenschaften von Objekten und Arrays verwendet, um deren Änderung nach der Initialisierung zu verbieten:

  • Es wird in der Beschreibung von Schnittstellen, Typen und Klassen verwendet, um zu verhindern, dass der Wert eines Feldes nach seiner Festlegung geändert wird.
  • readonly wird nur für die Eigenschaften von Objekten angewendet, nicht für Variablen.
  • Im Gegensatz zu const, welches angibt, dass eine Variable nicht neu zugewiesen werden kann, aber nicht verbietet, den Inhalt eines Objekts zu ändern, verbietet readonly die Modifikation des eigentlichen Feldes oder Elements des Arrays.

Beispiel:

interface User { readonly id: number; name: string; } const user: User = { id: 1, name: 'Anna' }; user.id = 2; // Fehler: Cannot assign to 'id' because it is a read-only property.

Für Arrays:

const nums: readonly number[] = [1, 2, 3]; nums.push(4); // Fehler: Property 'push' does not exist on type 'readonly number[]'.

Fangfrage.

Was ist der Unterschied zwischen const und readonly in TypeScript? Können sie sich gegenseitig ersetzen?

Antwort: Nein, können sie nicht. const ist eine Einschränkung für die Variable selbst (nicht neu zuweisen), während readonly eine Einschränkung für bestimmte Eigenschaften eines Objekts oder Elemente eines Arrays ist, aber die Variable selbst kann modifiziert werden (wenn es der Kontext erlaubt).

Beispiel:

const arr: readonly number[] = [1, 2, 3]; // arr = [2, 3, 4]; // Fehler wegen const // arr[0] = 5; // Fehler wegen readonly

Geschichte

In einem Projekt für eine Finanzplattform wurden beim Arbeiten mit Benutzerdaten normale Arrays number[] anstelle von readonly number[] verwendet. Dies führte dazu, dass eine Funktion versehentlich die Eingabedaten änderte – die Werte in den Arrays wurden an verschiedenen Stellen verwendet, was zu abweichenden Berichten führte. Der Fehler wurde erst nach einigen Tagen entdeckt, was das Unternehmen Zeit für eine Überprüfung und Wiederherstellung der Daten kostete.


Geschichte

In einer internen API wurden const und readonly verwechselt, da man dachte, dass const user: User die Änderung der Felder verhindern würde. Infolgedessen war es möglich, die Felder des Objekts zu ändern, obwohl dies im Lastenheft nicht zulässig war. Aufgrund des Unwissens über den Unterschied kam es zu Datenschutzverletzungen zwischen den Diensten.


Geschichte

In einer Open-Source-Bibliothek wurde eine der Datenstrukturen versehentlich veränderbar gemacht, weil man readonly in der Schnittstellendefinition vergaß. Dies ermöglichte es Dritten, private Daten zur Laufzeit zu ändern, was zu Fehlern führte, deren Behebung Refactoring erforderte.