Konstanten und Literaltypen
Aus der vorigen Lektion weißt du, dass einer Konstante nicht erneut etwas zugewiesen werden kann: TypeScript meldet TS2588, bevor das Programm läuft. TypeScript nutzt das auch beim Ableiten von Typen. Vergleiche:
let stufe = 3; // number
const maxStufe = 10; // 10stufe wird mit let angelegt, kann später also jede andere Zahl enthalten, und ihr Typ ist number. maxStufe kann sich nie ändern, deshalb gibt TypeScript ihr den genauesten Typ, den es gibt: 10. Ein solcher Typ, der nur einen Wert erlaubt, heißt Literaltyp. Mit Texten ist es genauso: Der Typ von const heldenName = "Kira"; ist "Kira".
Ein Literaltyp ist trotzdem eine Zahl oder ein Text: maxStufe + 1 und heldenName.length funktionieren wie gewohnt. Literaltypen fallen dir meist in Fehlermeldungen auf:
const gold = 120;
console.log(gold.toUpperCase());main.ts(2,18): error TS2339: Property 'toUpperCase' does not exist on type '120'.Lies type '120' als „die Zahl 120“. Bei Texten steht der Literaltyp in doppelten Anführungszeichen innerhalb der einfachen der Meldung: '"Regen"' bedeutet genau den Text Regen:
const wetter = "Regen";
if (wetter === "Sonne") {
console.log("Kira trocknet ihren Umhang.");
}main.ts(2,5): error TS2367: This comparison appears to be unintentional because the types '"Regen"' and '"Sonne"' have no overlap.wetter ist eine Konstante mit dem Wert "Regen", kann also nie "Sonne" sein, und die Bedingung kann nie wahr werden. TypeScript weist darauf hin. In einem echten Spiel würde sich das Wetter ändern, es wäre also ein let, und der Vergleich wäre in Ordnung.
Einen Literaltyp kannst du auch selbst als Annotation schreiben. Die Variable darf dann nur diesen einen Wert enthalten:
let schwierigkeit: "schwer" = "schwer";
schwierigkeit = "leicht";main.ts(2,1): error TS2322: Type '"leicht"' is not assignable to type '"schwer"'.Ein Typ mit einem einzigen Wert ist allein nicht sehr nützlich. In der Lektion „Unions und Eingrenzen“ kombinierst du mehrere: "leicht" | "normal" | "schwer" ist ein Typ, der genau diese drei Texte erlaubt, und TypeScript fängt dann jeden Tippfehler darin ab.
let oder const? Wie im JavaScript-Kurs: Nimm const für Werte, die sich nicht ändern, das sind die meisten, und let nur für solche, die sich ändern, etwa Leben, Gold oder einen Zähler. TypeScript sorgt dann vor dem Start des Programms dafür, dass es stimmt.
So schreibst du es:
Anweisungen
- 1
Kira steht einem Drachen gegenüber, aber TypeScript meldet zwei Fehler. Kiras Leben ändert sich während des Kampfes: Korrigiere das Programm so, dass es ausgibt:
Glut speit Feuer! Kiras Leben: 35/50 Glut speit erneut Feuer! Kiras Leben: 20/50 - 2
Sieh dir jetzt die anderen Variablen an:
drachenNameundfeuerSchadenändern sich nie, mach sie also zu Konstanten.maxLebenbleibt eine Konstante.