Pfeilfunktionen
Pfeilfunktionen bekommen ihre Typen an denselben Stellen. Der Typ eines Parameters steht hinter seinem Namen und der Rückgabetyp hinter den Klammern, vor dem Pfeil:
const verdoppeln = (n: number): number => n * 2;
const beschreiben = (name: string): string => `Held: ${name}`;
console.log(verdoppeln(21));
console.log(beschreiben("Kira"));Das gibt aus:
42
Held: KiraLies (n: number): number => als „nimmt eine Zahl n und gibt eine Zahl zurück“. Die Regeln sind dieselben wie bei Funktionen, die mit function geschrieben werden. Der Rückgabetyp darf weggelassen werden, und TypeScript leitet ihn ab. Jeder Aufruf wird geprüft. Und ein Parameter ohne Typ ist ein Fehler, auch in der kurzen Schreibweise ohne Klammern:
const verdoppeln = (n) => n * 2;
const beschreiben = name => `Held: ${name}`;main.ts(1,21): error TS7006: Parameter 'n' implicitly has an 'any' type.
main.ts(2,21): error TS7006: Parameter 'name' implicitly has an 'any' type.In JavaScript darf eine Pfeilfunktion mit einem Parameter ohne Klammern geschrieben werden: name => .... Mit einem Typ sind die Klammern nötig: (name: string) => .... Ohne sie bekommst du Fehler, die nicht viel helfen:
const beschreiben = name: string => `Held: ${name}`;main.ts(1,25): error TS1005: ',' expected.
main.ts(1,34): error TS1005: ';' expected.Der Rückgabetyp ist besonders nützlich, wenn der Rumpf in geschweiften Klammern steht. Diesen Fehler kennst du aus dem JavaScript-Kurs: geschweifte Klammern ohne return, sodass die Funktion undefined zurückgibt. Mit einem Rückgabetyp fängt TypeScript ihn ab:
const verdoppeln = (n: number): number => {
n * 2;
};
console.log(verdoppeln(21));main.ts(1,33): error TS2355: A function whose declared type is neither 'undefined', 'void', nor 'any' must return a value.Ohne den Rückgabetyp würde das Programm undefined ausgeben. Mit geschweiften Klammern musst du return n * 2; schreiben oder die Klammern weglassen: (n: number): number => n * 2.
Eine Pfeilfunktion, die nichts zurückgibt, hat den Rückgabetyp void, und eine ohne Parameter hat leere Klammern: const jubeln = (): void => console.log("Hurra!");. Standardwerte funktionieren auch: (leben: number, menge: number = 10): number => leben + menge.
So schreibst du es:
Anweisungen
- 1
Gib den Parametern der beiden Pfeilfunktionen ihre Typen:
kraftist einenumberundnameeinstring. Das Programm läuft dann, aber seine zweite Zeile lautetundefined. - 2
Gib beiden Pfeilfunktionen ihre Rückgabetypen:
numberfürfeuerballundstringfürzauberName. TypeScript meldet dann den Fehler inzauberName. Behebe ihn, sodass die Funktion den Text zurückgibt. Das Programm gibt aus:12 FROST! 45 - 3
Schreibe die Funktion
heilenals Pfeilfunktion um, die inconst heilengespeichert wird, mit denselben Parametertypen und dem Rückgabetypnumber. Das Programm gibt dieselben Zeilen aus wie vorher. - 4
Gib am Ende des Programms
heilen(feuerball(2), 4)aus: Das Ergebnis einer Pfeilfunktion geht direkt in eine andere, und TypeScript prüft, dass dort, wo eine Zahl erwartet wird, eine Zahl ankommt. Das Programm gibt aus:12 FROST! 45 10