Zusammenfassung
In dieser Lektion hast du gelernt:
- Eine diskriminierte Union ist eine Union aus Objekttypen, die eine Tag-Eigenschaft gemeinsam haben, etwa
art, mit je einem anderen Literaltyp:type Gegenstand = { art: "trank"; heilung: number } | { art: "waffe"; schaden: number };. Den Tag zu prüfen,if (gegenstand.art === "trank"), grenzt den Typ ein. TypeScript prüft die Eigenschaften jeder Art und fängt falsch geschriebene Arten ab. switch (gegenstand.art)springt zumcasemit demselben Wert;breakoderreturnbeendet ihn, und ohne sie rutscht das Programm in den nächsten Fall durch.defaultfängt den Rest ab. Jedercasegrenzt den Typ ein.- Die Vollständigkeitsprüfung in
default,const unbehandelt: never = gegenstand; return unbehandelt;, sorgt dafür, dass TypeScript jedesswitchmeldet, dem für eine Art der Fall fehlt, und sie nennt die Art.neverist der Typ ohne Werte. Record<Seltenheit, number>ist ein Objekt mit genau den Schlüsseln vonSeltenheitund einer Zahl für jeden von ihnen. Ein fehlender Schlüssel ist ein Fehler, undpreise[gegenstand.seltenheit]liest einen Wert.const klassen = ["krieger", "magier"] as const;ist eine schreibgeschützte Liste genauer Werte, undtype HeldenKlasse = (typeof klassen)[number];macht daraus eine Union, sodass Liste und Typ immer zusammenpassen.- Eine diskriminierte Union kann auch die Zustände einer einzigen Sache beschreiben, jeden mit eigenen Daten: Nur ein Auftrag mit
status: "erledigt"hat einebelohnung. - Schreibe statt eines
booleanmit optionalen Eigenschaften eine Union, damit unmögliche Kombinationen sich nicht schreiben lassen. Auch einbooleankann der Tag sein:{ istVerschlossen: false } | { istVerschlossen: true; schluesselName: string }.
Als Nächstes kommt ein weiteres kleines Projekt: das Auftragsbuch eines Schmieds, in dem du Objekttypen, Unions und diskriminierte Unions selbstständig einsetzt. Danach lernst du in der Lektion über Generics, Funktionen und Typen zu schreiben, die mit jedem Typ arbeiten, während TypeScript trotzdem im Blick behält, welcher Typ es ist: eine Funktion, die das erste Element eines beliebigen Arrays zurückgibt, oder eine Truhe, die jede Beute enthalten kann. Und du siehst, wie Typen mit spitzen Klammern wie Record funktionieren.
Jetzt üben. Kiras Reise im Editor ist eine Liste von Begegnungen: Kämpfe, Schätze und Rasten.
So schreibst du es:
Anweisungen
- 1
Führe das Programm aus: Die Vollständigkeitsprüfung meldet eine Art ohne Fall. Füge den Fall hinzu: Für eine Rast gibt
beschreibeBegegnungKira rastet am Feuerzurück. Das Programm gibt dann aus:Kira kämpft gegen einen Wolf (+20 EP) Kira findet 35 Gold Kira rastet am Feuer Kira kämpft gegen einen Goblin (+15 EP) - 2
Erstelle unter der Schleife
const zaehler: Record<"kampf" | "schatz" | "rast", number>mit jeder Anzahl bei0und zähle darin die Begegnungen jeder Art. - 3
Addiere außerdem die Erfahrungspunkte aus den Kämpfen und das Gold aus den Schätzen. Gib am Ende die Anzahlen und die Summen aus:
Kira kämpft gegen einen Wolf (+20 EP) Kira findet 35 Gold Kira rastet am Feuer Kira kämpft gegen einen Goblin (+15 EP) Kämpfe: 2, Schätze: 1, Rasten: 1 EP: 35, Gold: 35