Arrays
Auch Arrays haben Typen. Ein Array aus Texten hat den Typ string[] (lies: „ein Array von Strings“), ein Array aus Zahlen number[]: der Typ der Elemente, gefolgt von eckigen Klammern. Meist leitet TypeScript ihn aus den Elementen ab:
const inventar = ["Heiltrank", "Silberschwert"]; // string[]
const preise = [15, 45]; // number[]Aus dem Typ weiß TypeScript zwei Dinge. Jedes Element von inventar ist ein string, deshalb ist inventar[0].toUpperCase() in Ordnung. Und es dürfen nur Texte hinein:
const inventar = ["Heiltrank", "Silberschwert"];
inventar.push(20);main.ts(2,15): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'.push ist eine Methode, eine Funktion, die zum Array gehört, und 20 ist ihr Argument, der Wert in den Klammern. Das Argument kommt in den Parameter der Methode, und bei einem Array aus Texten hat dieser Parameter den Typ string. Eine Zahl passt dort nicht hinein.
Den Typ eines Arrays kannst du auch als Annotation schreiben: const preise: number[] = [15, 45];. Mit Elementen ist das nicht nötig. Nötig ist es bei einem leeren Array. Aus [] kann TypeScript nicht erkennen, was hineinkommt, deshalb versucht es, es aus dem abzuleiten, was das Programm hineinschiebt, und lässt alles zu:
const beute = [];
beute.push("Goldring");
beute.push(5);
console.log(beute);Dieses Programm läuft ohne Fehler und gibt ["Goldring", 5] aus. In anderen Programmen gibt TypeScript stattdessen auf und meldet Variable 'beute' implicitly has type 'any[]' in some locations where its type cannot be determined. (any lernst du am Ende dieser Lektion kennen.) Gib einem leeren Array also seinen Typ:
const beute: string[] = [];
beute.push("Goldring");
beute.push(5);main.ts(3,12): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'.Typischer Fehler: const beute: [] = [];. Der Typ [] ohne etwas davor bedeutet ein Array, das immer leer ist, nichts lässt sich also hineinschieben: Argument of type '"Goldring"' is not assignable to parameter of type 'never'. (never ist ein Typ, der gar keine Werte hat.) Schreibe den Typ der Elemente vor die Klammern: string[].
So schreibst du es:
Anweisungen
- 1
Kira hat 20 Pfeile gefunden, aber das Inventar enthält die Namen von Gegenständen, deshalb lässt TypeScript die Zahl nicht hinein. Ersetze
20durch den Text"Pfeile", sodass das Programm ausgibt:["Heiltrank", "Silberschwert", "Alter Schlüssel", "Pfeile"] - 2
Kira öffnet eine Truhe. Lege am Ende des Programms ein leeres Array
beutefür die Namen der Gegenstände in der Truhe an, mit dem Typstring[]. - 3
Schiebe
"Goldring"und"Drachenschuppe"inbeuteund gib das Array aus, sodass das Programm zusätzlich ausgibt:["Goldring", "Drachenschuppe"]