Variablen ohne Wert
Eine Variable, die ohne Wert angelegt wird, etwa let belohnung: number;, hat zunächst keinen Wert: In JavaScript enthält sie undefined. Der Wert wird später darin gespeichert, oft in den Zweigen eines if. TypeScript verfolgt jeden Weg durch das Programm und prüft, dass die Variable überall, wo du sie verwendest, sicher einen Wert hat:
let monster = "Goblin";
let belohnung: number;
if (monster === "Wolf") {
belohnung = 50;
} else if (monster === "Goblin") {
belohnung = 20;
}
console.log("Belohnung:", belohnung);main.ts(10,27): error TS2454: Variable 'belohnung' is used before being assigned.Die Meldung sagt, dass die Variable verwendet wird, bevor ihr ein Wert zugewiesen wurde. Aber das Monster ist ein Goblin, also bekommt belohnung 20, oder? Diesmal ja. TypeScript sieht aber nicht darauf, was monster gerade enthält. Es prüft jeden Weg, den das Programm nehmen könnte. Wäre das Monster ein Drache, würde kein Zweig laufen, und das Programm würde Belohnung: undefined ausgeben. Eine Rechnung wie gold + belohnung ergäbe dann NaN.
Um das zu beheben, sorge dafür, dass jeder Weg einen Wert speichert, meist mit einem else-Zweig, der in allen übrigen Fällen läuft:
if (monster === "Wolf") {
belohnung = 50;
} else if (monster === "Goblin") {
belohnung = 20;
} else {
belohnung = 0;
}Eine andere Möglichkeit ist ein Startwert: let belohnung = 0;. Die Variable hat dann von Anfang an einen Wert, die Zweige ändern ihn nur, und du brauchst nicht einmal den Typ, weil TypeScript ihn aus der 0 ableitet. Wähle, was passt: einen Startwert, wenn es einen sinnvollen gibt, und eine Variable ohne Wert, wenn der Wert wirklich nur aus den Zweigen kommt. TypeScript prüft dann, dass du keinen vergessen hast.
Typische Fehler:
- Ein
ifoderelse ifohne abschließendeselse. - Ein Zweig, der etwas anderes tut und vergisst, den Wert zu speichern.
- Eine Variable verwenden, die nie einen Wert bekommt:
let belohnung: number;gefolgt vonconsole.log(belohnung);ergibt dasselbeTS2454.
So schreibst du es:
Anweisungen
- 1
Führe das Programm aus: TypeScript meldet
TS2454zweimal. Derelse-Zweig für das große Zimmer hat vergessen, den Preis zu setzen. Das große Zimmer kostet 25 Gold. Korrigiere den Zweig, sodass das Programm ausgibt:Das beste Zimmer im Haus! Kira zahlt 25 Gold. Gold übrig: 95 - 2
Bruno serviert auch Abendessen, und es hängt ebenfalls vom Zimmer ab. Lege unter
preiseine Variableabendessenvom Typstringohne Wert an. Speichere dann in jedem der drei Zweige einen Wert darin:"Brot"für das kleine Zimmer,"Suppe"für das mittlere und"Brathähnchen"für das große. - 3
Gib am Ende des Programms das Abendessen aus, sodass das Programm zusätzlich ausgibt:
Abendessen: BrathähnchenWenn TypeScript
TS2454fürabendessenmeldet, prüfe, ob jeder Zweig einen Wert darin speichert.