Dein erster Typfehler
In JavaScript kann eine Variable alles enthalten, und was sie enthält, kann sich jederzeit von einer Zahl in einen Text ändern:
let leben = 3;
console.log("Leben:", leben);
leben = "drei";
console.log("Leben:", leben);Im JavaScript-Kurs würde dieses Programm Leben: 3 und Leben: drei ausgeben, und nichts schiene falsch. Der Ärger käme später: sobald das Spiel mit den Leben rechnet, zum Beispiel leben - 1, wäre das Ergebnis NaN.
TypeScript führt dieses Programm nicht aus. Stattdessen zeigt es einen Fehler:
main.ts(3,1): error TS2322: Type 'string' is not assignable to type 'number'.Was ist passiert? In Zeile 1 hat leben den Wert 3 bekommen, also eine Zahl. Daraus schließt TypeScript, dass leben Zahlen enthält: Der Typ ist number. Von da an prüft es jeden Wert, den das Programm in leben speichert. In Zeile 3 versucht das Programm, dort "drei" zu speichern, und das ist ein Text. In TypeScript heißt der Typ von Texten string, genauso wie der Name, den typeof in JavaScript liefert. Die Meldung sagt genau das: Ein Wert vom Typ string ist dem Typ number nicht zuweisbar (englisch assignable), er lässt sich also nicht in einer Variablen speichern, die Zahlen enthält. Die 3 in main.ts(3,1) ist die Nummer der Zeile mit dem Fehler. Alle Teile der Meldung lernst du in der nächsten Übung kennen.
Beachte, dass das Programm nichts ausgegeben hat, nicht einmal Leben: 3 aus Zeile 2, obwohl diese Zeile in Ordnung ist. TypeScript prüft das ganze Programm, bevor es läuft, und wenn es irgendeinen Typfehler findet, läuft nichts. In JavaScript zeigten sich die meisten Fehler erst, wenn das Programm bei ihnen ankam, und was es bis dahin ausgegeben hatte, blieb in der Ausgabe. TypeScript startet das Programm erst, wenn alle Typfehler behoben sind.
Das mag streng wirken, aber genau das macht TypeScript nützlich. Der Fehler wird sofort gemeldet, in der Zeile, in der er steht, und nicht als seltsames NaN irgendwo später oder als falsches Ergebnis, das niemand bemerkt.
Eine Variable behält ihren Typ im ganzen Programm, aber ihr Wert darf sich ändern, solange der neue Wert denselben Typ hat: leben = 2; ist in Ordnung. Aber Vorsicht mit Anführungszeichen: leben = "2"; ist ebenfalls ein Fehler, denn "2" in Anführungszeichen ist ein Text, keine Zahl.
So schreibst du es:
Anweisungen
- 1
Das Programm im Editor zählt Kiras Gold und Tränke in einem Laden, aber TypeScript führt es nicht aus. Klicke auf Ausführen und lies die Fehlermeldung. Behebe dann die Zeile mit dem Fehler: Kira hat noch einen Trank gekauft, jetzt hat sie also 3, und
traenkemuss eine Zahl bleiben. Das Programm gibt dann aus:Gold: 120 Tränke: 2 Gold: 90 Tränke: 3 - 2
Vor ihrem nächsten Kampf trinkt Kira einen Trank. Verringere am Ende des Programms
traenkemittraenke = traenke - 1;um 1 und gib dieselbe Zeile noch einmal aus, sodass das Programm ausgibt:Gold: 120 Tränke: 2 Gold: 90 Tränke: 3 Gold: 90 Tränke: 2