Die richtige Anzahl von Argumenten
In JavaScript kannst du eine Funktion mit weniger Argumenten aufrufen, als sie Parameter hat, oder mit mehr. Ein Parameter ohne Argument ist undefined, und überzählige Argumente werden stillschweigend weggeworfen:
function schaden(kraft, ruestung) {
return kraft - ruestung;
}
console.log(schaden(12));
console.log(schaden(20, 5, 3));In JavaScript gibt das aus:
NaN
15NaN („not a number“) bekommst du, wenn du mit undefined rechnest: 12 - undefined. Im zweiten Aufruf war die 3 vielleicht als Bonus gedacht, aber schaden hat keinen Parameter dafür, also geht sie ohne ein Wort verloren.
TypeScript prüft in jedem Aufruf die Anzahl der Argumente. Mit hinzugefügten Typen:
function schaden(kraft: number, ruestung: number): number {
return kraft - ruestung;
}
console.log(schaden(12));
console.log(schaden(20, 5, 3));main.ts(5,13): error TS2554: Expected 2 arguments, but got 1.
main.ts(6,28): error TS2554: Expected 2 arguments, but got 3.Expected 2 arguments, but got 1: Die Funktion hat zwei Parameter, erwartet also zwei Argumente, und der Aufruf übergibt nur eines. Fehlt ein Argument, zeigt die Spalte auf den Namen der Funktion. Ist eines zu viel, zeigt sie auf das erste überzählige Argument.
Wenn du diesen Fehler siehst, sieh dir die erste Zeile der Funktion an: Was braucht sie, und in welcher Reihenfolge? Manchmal ist der Aufruf falsch, und du korrigierst den Aufruf. Manchmal braucht die Funktion wirklich einen weiteren Wert, und du fügst einen Parameter hinzu. Dann tut TypeScript etwas sehr Nützliches: Es zeigt dir jeden Aufruf im Programm, der geändert werden muss. In einem großen Programm können das Dutzende Stellen sein, die du sonst selbst suchen müsstest, und in JavaScript würden die, die du übersehen hast, stillschweigend mit undefined rechnen.
Es gibt auch Parameter, die weggelassen werden dürfen. Sie sind das Thema der nächsten beiden Übungen.
So schreibst du es:
Anweisungen
- 1
Korrigiere beide Aufrufe. Kira trifft den Goblin mit 8 Schaden. Brunos Aufruf hat ein Argument zu viel: Entferne die
3. Das Programm gibt aus:Kira trifft den Goblin mit 8 Schaden Bruno trifft den Wolf mit 12 Schaden - 2
Monster haben jetzt eine Rüstung, die den Schaden senkt. Füge
angreifeneinen vierten Parameterruestungvom Typnumberhinzu. TypeScript meldet dann beide Aufrufe, weil jedem jetzt ein Argument fehlt. Füge ihnen die Rüstung hinzu: Der Goblin hat Rüstung 2, der Wolf 5. - 3
Verwende jetzt die Rüstung: Schreibe im zurückgegebenen Text
${schaden - ruestung}statt${schaden}. Das Programm gibt aus:Kira trifft den Goblin mit 6 Schaden Bruno trifft den Wolf mit 7 Schaden