Zusammenfassung
In dieser Lektion hast du gelernt:
- Eine Klasse ist eine Vorlage für Objekte:
class Monster { name: string = "Goblin"; }.new Monster()erzeugt eine Instanz, die alsMonster { name: "Goblin" }ausgegeben wird. Der Name der Klasse ist auch ein Typ:function treffe(monster: Monster). - Jedes Feld braucht einen Wert, einen Anfangswert oder einen aus dem Konstruktor; sonst bekommst du TS2564.
- Der Konstruktor läuft bei
newund bekommt seine Argumente:constructor(name: string) { this.name = name; }. Darin istthisdas neue Objekt. Die Kurzformconstructor(public name: string)ist hier nicht erlaubt (TS1294). - Methoden sind Funktionen in einer Klasse:
beschreibe(): string { return this.name; }, aufgerufen alskira.beschreibe(). In einer Methode istthisdas Objekt vor dem Punkt. Ohnethis.meldet TypeScript TS2663. - Ein
private-Feld kann nur innerhalb der Klasse verwendet werden (anderswo TS2341); Methoden sind der Weg hinein. Ohneprivateist ein Memberpublic. Die eigenen privaten Felder von JavaScript beginnen mit#. - Ein
readonly-Feld bekommt seinen Wert nur als Anfangswert oder im Konstruktor (anderswo TS2540). class Zauberer implements Figurlässt TypeScript prüfen, dass die Klasse alles hat, was das Interface verlangt (TS2420). TypeScript vergleicht Formen, also passt jedes Objekt der richtigen Form zum Interface.class Endgegner extends Monstererbt die Felder und Methoden vonMonster. Sein Konstruktor muss zuerstsuper(…)aufrufen (TS2377). EinEndgegnerpasst überall, wo einMonstererwartet wird.- Eine abgeleitete Klasse kann eine Methode überschreiben:
override beschreibe(): string. Mitoverrideprüft TypeScript, dass die Elternklasse die Methode hat (TS4117), undsuper.beschreibe()ruft die Version der Elternklasse auf.
Als Nächstes kommt das letzte kleine Projekt: eine Bank für Abenteurer, gebaut mit Klassen und Generics. Danach baust du in der Lektion Utility Types neue Typen aus denen, die du hast: einen Helden, dessen Eigenschaften alle optional sind, einen Helden ohne seine ID und mehr.
Aber zuerst fasst du diese Lektion zusammen. In Kiras Beutel liegen verschiedene Dinge, die alle benutzt werden können. Das Interface dafür steht im Editor.
So schreibst du es:
Anweisungen
- 1
Schreibe eine Klasse
Trank, dieBenutzbarimplementiert. Sie hat ein schreibgeschütztes Feldnameund ein privates Felddosen(eine Zahl), beide vom Konstruktor gesetzt. Ihre Methodebenutze()gibt`${name} ist leer`zurück, wenn keine Dosen mehr übrig sind. Sonst nimmt sie eine Dosis weg und gibt`${name}: noch ${dosen} übrig`zurück, zum BeispielHeiltrank: noch 1 übrig. - 2
Erzeuge
const trank = new Trank("Heiltrank", 2);und benutze den Trank dreimal, wobei du jedes Mal ausgibst, wasbenutze()zurückgibt:Heiltrank: noch 1 übrig Heiltrank: noch 0 übrig Heiltrank ist leer - 3
Schreibe eine zweite Klasse,
Schriftrolle, die ebenfallsBenutzbarimplementiert. Sie hat einen schreibgeschütztennameund einen schreibgeschütztenzauber, beide vom Konstruktor gesetzt, und ihre Methodebenutze()gibt`${name}: du wirkst ${zauber}`zurück. Lege dann einen neuen Trank und eine Schriftrolle in einen Beutel,const beutel: Benutzbar[] = [new Trank("Manatrank", 1), new Schriftrolle("Schriftrolle des Lichts", "Licht")];, und benutze alles im Beutel in einerfor...of-Schleife, wobei du die Ergebnisse ausgibst. Das Programm gibt aus:Heiltrank ist leer Manatrank: noch 0 übrig Schriftrolle des Lichts: du wirkst Licht