Zusammenfassung
In dieser Lektion hast du gelernt:
- Ein Union-Typ wie
string | numbererlaubt einen Wert jedes seiner Typen. Ohne Prüfung darfst du nur tun, was für alle funktioniert:belohnung.toUpperCase()bei einemstring | numberist ein Fehler. - Eine Prüfung grenzt den Typ ein. Innerhalb von
if (typeof belohnung === "string") { … }istbelohnungeinstring; imelse-Zweig und unter einemifmitreturnist sie einenumber. Ein Array aus einer Union braucht Klammern:(number | string)[]. - Eine Literal-Union wie
type HeldenKlasse = "Krieger" | "Magier" | "Waldläufer";erlaubt nur diese Werte. TypeScript meldet Tippfehler in Werten, Argumenten und Vergleichen. Einletmit einem Text hat den Typstring, gib ihm also den Typ oder verwendeconst. Verwende Literal-Unions stattenum. nullundundefinedgehören nur dann zu einem Typ, wenn du sie dort hinschreibst:Monster | null. Prüfe einen solchen Wert, bevor du ihn verwendest, zum Beispiel mitif (ziel === null) { return; }; sonst meldet TypeScript'ziel' is possibly 'null'.find()gibt das erste passende Element zurück oderundefined, wenn nichts passt. Sein Typ istGegenstand | undefined: Behandle beide Fälle und gib einer Funktion, die sucht, den RückgabetypGegenstand | undefined.held.waffe?.nameliestnamenur, wennheld.waffeexistiert, sonst ergibt esundefined.wert ?? "Standard"ersetztnullundundefined, aber anders als||nicht0oder"".Array.isArray(beute)unterscheidet ein Array von einem einzelnen Wert, zum Beispiel bei einemstring | string[]. Achte auf das, was für beide Typen funktioniert, wielengthundfor...of.unknownakzeptiert jeden Wert, erlaubt aber nichts, bis du ihn eingrenzt, zum Beispiel mittypeof. Verwende es für Daten von außen stattany."heilung" in gegenstandgrenzt eine Union aus Objekttypen durch eine Eigenschaft ein. Ein Type Guard,function istTrank(gegenstand: Gegenstand): gegenstand is Trank, steckt eine solche Prüfung in eine Funktion. TypeScript vertraut ihm, also muss die Prüfung stimmen.
In der nächsten Lektion, Daten modellieren, lernst du den häufigsten Weg kennen, Daten in TypeScript mit Unions zu modellieren: diskriminierte Unions, bei denen eine Eigenschaft wie art sagt, was jedes Objekt ist. Außerdem lernst du das switch von JavaScript kennen und wie TypeScript dafür sorgt, dass du keinen Fall vergessen hast.
So schreibst du es:
Anweisungen
- 1
Zeit zum Üben. Die Taverne im Editor hat eine Auftragstafel. Jeder Auftrag hat eine Region, eine Belohnung (Gold oder ein Gegenstand) und manchmal einen Helden, der dabei hilft. Führe das Programm aus: TypeScript findet einen Fehler in den Daten. Behebe ihn.
- 2
Schreibe eine Funktion
formatiereBelohnungmit einem Parameterbelohnungvom Typnumber | stringund dem Rückgabetypstring. Für eine Zahl gibt sie zum Beispiel10 Goldzurück; für einen Text den Text mitGegenstanddavor, zum BeispielGegenstand Silberschwert. - 3
Schreibe eine Funktion
beschreibeAuftragmit einem Parametertitel(ein Text). Sie findet den Auftrag mit diesem Titel auf der Tafel und gibt eine Beschreibung wieRatten in der Mine (Minen): 10 Gold, Helfer: niemandzurück: VerwendeformatiereBelohnungund??für einen Auftrag ohne Helfer. Wenn kein Auftrag diesen Titel hat, gibt sie zum BeispielKein Auftrag namens Drachenjagdzurück. Gib die Beschreibungen von"Die Trollbrücke","Ratten in der Mine"und"Drachenjagd"aus. Das Programm gibt dann aus:Die Trollbrücke (Berge): Gegenstand Silberschwert, Helfer: Bruno Ratten in der Mine (Minen): 10 Gold, Helfer: niemand Kein Auftrag namens Drachenjagd