Typaliase
{ name: string; leben: number } bei jeder Variablen, jedem Parameter und jedem Array zu schreiben, das einen Helden enthält, ist lang, und wenn Helden eine neue Eigenschaft bekommen, müsstest du es überall ändern. Gib dem Typ stattdessen mit type einen Namen, das du in der Lektion über Funktionen für Funktionstypen verwendet hast:
type Held = { name: string; leben: number };
function beschreibeHeld(held: Held): string {
return `${held.name} (${held.leben} Leben)`;
}
const kira: Held = { name: "Kira", leben: 50 };
const gruppe: Held[] = [kira, { name: "Bruno", leben: 65 }];
for (const held of gruppe) {
console.log(beschreibeHeld(held));
}Das gibt aus:
Kira (50 Leben)
Bruno (65 Leben)type Held = ...; erstellt einen Typalias: Held ist jetzt ein anderer Name für { name: string; leben: number }. Du kannst ihn überall verwenden, wo ein Typ stehen darf: bei Variablen (kira: Held), Parametern (held: Held), Rückgabetypen und Arrays (Held[] ist ein Array von Helden). Wenn sich der Typ ändert, änderst du ihn an einer einzigen Stelle.
Typnamen beginnen mit einem Großbuchstaben (Held, MagischerGegenstand), damit du sie von Variablen unterscheiden kannst, die mit einem Kleinbuchstaben beginnen. Programmierer schreiben Typen meist an den Anfang des Programms.
Fehlermeldungen verwenden jetzt den Namen, deshalb werden sie kürzer:
type Held = { name: string; leben: number };
const kira: Held = { name: "Kira", leben: 50 };
console.log(kira.gold);main.ts(4,18): error TS2339: Property 'gold' does not exist on type 'Held'.Ein Typalias existiert nur für TypeScript. Wie jeder Typ verschwindet er aus dem JavaScript, das läuft. type Held erzeugt also keinen Helden: Es beschreibt nur, wie ein Held aussieht.
Typische Fehler:
- Ein fehlendes
=:type Gegenstand { name: string; preis: number };ergibt'=' expected. - Ein anders geschriebener Name. Bei Typnamen wird wie bei Variablen zwischen Groß- und Kleinschreibung unterschieden:
const schwert: gegenstand = ...ergibtCannot find name 'gegenstand'. Did you mean 'Gegenstand'? - Zwei Aliase mit demselben Namen:
Duplicate identifier 'Gegenstand'.Jeder Typname darf nur einmal vorkommen.
So schreibst du es:
Anweisungen
- 1
Erstelle am Anfang des Programms einen Typalias
Gegenstandfür{ name: string; preis: number }. Verwende dannGegenstandan allen drei Stellen statt des langen Typs. - 2
Erstelle unter dem Schild ein Array
schaufenstervom TypGegenstand[]mit drei Gegenständen:schwert,schildund einem neuen, der Laterne{ name: "Laterne", preis: 15 }. - 3
Ersetze die beiden
console.log-Zeilen am Ende durch einefor...of-Schleife überschaufenster, die das Preisschild jedes Gegenstands ausgibt. Das Programm gibt aus:Silberschwert: 120 Gold Eichenschild: 45 Gold Laterne: 15 Gold