Welche Operationen erlaubt sind
TypeScript weiß, was jeder Operator mit jedem Typ macht, und meldet die Operationen, die keinen Sinn ergeben. Dieses Programm hat vier davon:
let gold = 120;
const preisschild = "15";
console.log(preisschild * 2);
console.log(gold - preisschild);
if (gold === "120") {
console.log("Kira ist reich!");
}
if (gold > "100") {
console.log("Kira ist reich!");
}main.ts(4,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
main.ts(5,20): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
main.ts(6,5): error TS2367: This comparison appears to be unintentional because the types 'number' and 'string' have no overlap.
main.ts(9,5): error TS2365: Operator '>' cannot be applied to types 'number' and 'string'.- Arithmetik braucht Zahlen. Die Operatoren
-,*,/und%sind arithmetische Operationen, und ihre beiden Seiten, die linke und die rechte, müssen Zahlen sein. (anyschaltet die Prüfung aus, darauf kommst du am Ende dieser Lektion;bigintist ein Typ für riesige Ganzzahlen, und Enums sind ein älteres Feature von TypeScript, das dieser Kurs nicht verwendet.) In JavaScript ist"15" * 2gleich30, weil JavaScript den Text selbst in eine Zahl umwandelt. TypeScript sieht darin einen Fehler: Du wusstest wahrscheinlich nicht, dass der Wert ein Text ist, und mit+würde derselbe Wert verbinden statt addieren. - Eine Zahl und ein Text sind nie gleich.
===vergleicht auch die Typen, deshalb istgold === "120"in JavaScript immerfalse. TypeScript sagt dir, dass der Vergleich unbeabsichtigt aussieht, denn kein Wert kann gleichzeitig eine Zahl und ein Text sein (die Typen haben „keine Überschneidung“). Auch der Vergleich mit<oder>ist ein Fehler. - Verbinden mit
+ist erlaubt. Ist eine Seite von+ein Text, verbindet+, wie du es kennst:"Gold: " + gold.
Wenn eine Zahl als Text gespeichert ist, wandle sie um. Number() aus dem JavaScript-Kurs macht aus einem Text eine Zahl, und String() macht aus einer Zahl einen Text:
console.log(Number("15") * 2);
console.log(String(15) + 2);Das gibt aus:
30
152TypeScript weiß, dass Number(…) immer eine number ist, deshalb ist Number(preisschild) * 2 in Ordnung. Es weiß aber nicht, ob der Text wirklich eine Zahl enthält: Number("fünfzehn") ergibt NaN, wie in JavaScript.
So schreibst du es:
Anweisungen
- 1
Kira kauft in Brunos Laden 40 Pfeile, aber TypeScript meldet zwei Fehler. Behebe beide: Wandle den Preis vom Preisschild mit
Number()in eine Zahl um und vergleiche das Gold mit der Zahl50. Das Programm gibt dann aus:Kira geht das Gold aus! Gold übrig: 40 - 2
Bruno schreibt Kira eine Quittung. Gib sie am Ende des Programms aus und verbinde die Texte mit
anzahlundgesamtmithilfe von+:Quittung: 40 Pfeile für 80 Gold