Zusammenfassung
In dieser Lektion hast du gelernt:
- Utility-Typen sind generische Typen, die in TypeScript eingebaut sind und aus einem vorhandenen Typ einen neuen machen. Sie werden nur von TypeScript geprüft und verschwinden wie jeder Typ aus dem Programm.
- Spread (JavaScript) kopiert die Eigenschaften eines Objekts in ein neues Objekt:
{ ...held, stufe: 4 }. Was später geschrieben wird, gewinnt, also ersetzen in{ ...held, ...aenderungen }die Änderungen die alten Werte. Bei Arrays erzeugt[...gegenstaende, "Seil"]ein neues Array mit einem Element mehr. Partial<Held>istHeldmit lauter optionalen Eigenschaften. Es passt zu Änderungen:function aktualisiereHeld(held: Held, aenderungen: Partial<Held>): Held.Omit<Held, "id">istHeldohneid, undPick<Held, "name" | "stufe">hat nurnameundstufe.Pickprüft die Namen,Omitnicht.readonly string[], auchReadonlyArray<string>geschrieben, ist ein Array, das gelesen, aber nicht geändert werden kann: keinpush, keinpop, keingegenstaende[0] = …. Eine Funktion, die ein Array nur liest, sollte ein schreibgeschütztes annehmen; ein normales passt auch.Readonly<Held>macht jede Eigenschaft schreibgeschützt.Held["heldenKlasse"]ist der Typ einer Eigenschaft eines anderen Typs, sodass der Typ nur einmal geschrieben wird. Bei einer Union istAuftrag["status"]die Union aller Status, undRecord<Auftrag["status"], number>hat für jeden eine Zahl.- In einem Typ ist
typeof startattributeder Typ einer Variablen:type Attribute = typeof startattribute;. Dastypeofvon JavaScript im Code gibt einen Text zurück, während das Programm läuft. A & Bist eine Intersection: beide Typen gleichzeitig, mit allen Eigenschaften von beiden:type Boss = Monster & { phase: number };.A | Bist das eine oder das andere.
In der nächsten Lektion, dem Abschlussprojekt, setzt du den ganzen Kurs zusammen und baust Schritt für Schritt Kiras Inventar und ihr Auftragsbuch.
Jetzt noch etwas Übung. Im Editor findest du Kiras Zauberbuch. Wenn sie einen neuen Zauber lernt, darf das alte Buch nicht verändert werden: Die Funktion gibt ein neues zurück.
So schreibst du es:
Anweisungen
- 1
Schreibe eine Funktion
lerneZauber(buch: readonly Zauber[], zauber: Omit<Zauber, "id">): Zauber[], die ein neues Array zurückgibt: alle Zauber ausbuchund am Ende den neuen Zauber mitid: buch.length + 1. Verwende Spread zweimal, für das Array und für den Zauber. - 2
Schreibe eine Funktion
zauberDerSchule(buch: readonly Zauber[], schule: Zauber["schule"]): string[], die die Namen der Zauber einer Schule in einem Array zurückgibt. Einefor...of-Schleife mitpushgenügt, oderfilterundmap. - 3
Speichere unter den Funktionen
lerneZauber(zauberbuch, { name: "Eislanze", schule: "eis", mana: 4 })in einer KonstantenneuesBuch. Gib dannzauberDerSchule(neuesBuch, "eis")undzauberDerSchule(zauberbuch, "eis")aus. Das alte Zauberbuch hat sich nicht verändert:["Frostnova", "Eislanze"] ["Frostnova"]