Schreibgeschützte Eigenschaften
Manche Eigenschaften sollten sich nie mehr ändern, sobald das Objekt existiert: der Name eines Helden, die Identifikationsnummer eines Gegenstands. Markiere sie mit readonly:
type Held = { readonly name: string; leben: number };
const kira: Held = { name: "Kira", leben: 50 };
kira.leben = 40;
kira.name = "Bruno";main.ts(5,6): error TS2540: Cannot assign to 'name' because it is a read-only property.leben darf sich ändern, deshalb ist Zeile 4 in Ordnung. name nicht: Cannot assign to 'name' because it is a read-only property. Du kannst sie weiterhin lesen, ausgeben oder an eine Funktion übergeben. Ihr Wert wird einmal gesetzt, wenn das Objekt erstellt wird.
Worin besteht der Unterschied zu const? const schützt die Variable: kira muss immer dasselbe Objekt enthalten. Die Eigenschaften des Objekts können sich aber trotzdem ändern. Du erinnerst dich vielleicht aus dem JavaScript-Kurs, dass das funktioniert:
const kira = { name: "Kira", leben: 50 };
kira.name = "Bruno";
console.log(kira);Das gibt aus:
{ name: "Bruno", leben: 50 }readonly schützt eine einzelne Eigenschaft, in welcher Variablen das Objekt auch steckt, sogar in einer mit let angelegten, und auch in Funktionen, die das Objekt als Argument bekommen.
Wie jeder Typ wird readonly nur von TypeScript geprüft und verschwindet aus dem JavaScript, das läuft. Zur Laufzeit würde die Änderung nichts aufhalten. Aber ein Programm mit einer solchen Änderung kommt gar nicht erst zum Laufen, weil TypeScript sie vorher meldet.
Typische Fehler:
conststattreadonlyim Typ:{ const name: string }ergibt';' expected.In einem Typ heißt das Wortreadonly.- Die Eigenschaft mit
+=oder++zu ändern: Das ist auch eine Änderung.kira.name += "!"ergibt denselben Fehler wiekira.name = "Bruno".
So schreibst du es:
Anweisungen
- 1
Der Name soll sich nicht ändern. Mache
nameschreibgeschützt. TypeScript zeigt dir dann die Zeile inerhoeheStufe, die den Namen ändert: Lösche sie, denn die Stufe steht schon instufe. Das Programm gibtKira hat Stufe 4aus. - 2
Jeder Held der Gilde hat eine Identifikationsnummer, die sich nie ändert. Füge
Heldeine schreibgeschützte Eigenschaftidvom Typnumberhinzu. TypeScript meldet dann Kira, die keine ID hat: Gib ihr die ID7. - 3
Gib am Ende des Programms die folgende Zeile aus, mit
kira.id,kira.nameundkira.stufe:#7 Kira, Stufe 4