Fehler, die dich retten
Im JavaScript-Kurs lösten manche Fehler gar keine Fehlermeldung aus. Das Programm lief und lieferte ein seltsames Ergebnis, oder es stürzte erst ab, wenn es beim Fehler ankam. Dieses Programm hat drei solche Fehler:
const held = { name: "Kira", leben: 50 };
const maxLeben = 50;
held.leben = held.lebn - 10;
console.log("Leben:", held.leben);
console.log(held.name.toUppercase());
maxLeben = 60;Als JavaScript würde es Leben: NaN ausgeben und dann mit TypeError: held.name.toUppercase is not a function abstürzen. Der dritte Fehler würde warten, bis du den zweiten behoben hast. TypeScript findet alle drei, bevor das Programm läuft:
main.ts(4,19): error TS2551: Property 'lebn' does not exist on type '{ name: string; leben: number; }'. Did you mean 'leben'?
main.ts(6,23): error TS2551: Property 'toUppercase' does not exist on type 'string'. Did you mean 'toUpperCase'?
main.ts(7,1): error TS2588: Cannot assign to 'maxLeben' because it is a constant.- Ein Tippfehler im Namen einer Eigenschaft. In JavaScript ergibt eine Eigenschaft, die es nicht gibt,
undefined, und eine Rechnung mitundefinedergibtNaN. TypeScript weiß aus dem Objekt, das du angelegt hast, welche Eigenschaften es hat. Es fängt den Tippfehler sogar bei einer Zuweisung ab: In JavaScript würdeheld.Leben = 60;stillschweigend eine neue EigenschaftLebenhinzufügen, TypeScript dagegen meldetProperty 'Leben' does not exist on type …und schlägtlebenvor. - Eine falsch geschriebene Methode. Groß- und Kleinbuchstaben sind verschieden,
toUppercaseist also nichttoUpperCase. TypeScript kennt alle Methoden von Texten und schlägt die richtige vor. - Zuweisung an eine Konstante. In JavaScript war das
TypeError: Assignment to constant variable., aber erst während das Programm lief. TypeScript meldet es vorher:Cannot assign to 'maxLeben' because it is a constant.Wenn sich der Wert ändern soll, lege die Variable mitletan. Wenn nicht, weise ihr nichts zu.
Denk daran, dass const die Variable schützt, nicht das Objekt darin. held.leben = … oben ist in Ordnung, obwohl held eine Konstante ist: Die Konstante enthält die ganze Zeit dasselbe Objekt, nur eine Eigenschaft des Objekts ändert sich. So funktioniert JavaScript, und TypeScript folgt dem.
Alle diese Fehler sind leicht zu machen und in einem großen Programm schwer zu finden, weil JavaScript ihre Wirkung woanders zeigt als dort, wo sie sind. TypeScript zeigt auf die genaue Zeile. Das ist der Hauptgrund, warum Programmierer es nutzen: Viele Fehler kommen gar nicht erst zum Laufen.
So schreibst du es:
Anweisungen
- 1
Im Editor kämpft Kira gegen einen Wolf. Das Programm hat vier Fehler und würde als JavaScript gleich in Zeile 6 abstürzen. Behebe sie alle, sodass das Programm ausgibt:
KIRA VS WOLF Runde 1: Kiras Leben 42 Runde 2: Kiras Leben 34 - 2
Der Wolf gibt nicht auf. Füge am Ende des Programms eine dritte Runde hinzu: Erhöhe
rundeum 1 und denangriffdes Wolfs um 2 (der Wolf wird wütend), verringere dann Kiras Leben um den Angriff des Wolfs und gib dieselbe Zeile aus wie nach den anderen Runden.wolfist eine Konstante, aber du änderst nur eine Eigenschaft, also erlaubt TypeScript es. Das Programm gibt dann aus:KIRA VS WOLF Runde 1: Kiras Leben 42 Runde 2: Kiras Leben 34 Runde 3: Kiras Leben 24