Kodokon kodokon.com

Inferenz, any und unknown

Lass TypeScript die Typen per Inferenz selbst erkennen und verstehe, warum unknown dem gefährlichen any überlegen ist.

8 Min. · 3 Fragen

Diese Lektion in Kodokon öffnen

Gute Nachricht: Du musst nicht jede Variable annotieren. Dank der Typinferenz erkennt TypeScript den Typ einer Variable anhand des Werts, den du ihr gibst. let city = "Lyon" zu schreiben genügt: TypeScript weiß, dass city ein string ist, und schützt sie, als hättest du sie annotiert.

TYPESCRIPT
let city = "Lyon"; // inferred type: string
let count = 3;     // inferred type: number

count = count + 1; // accepted
// city = 42; -> error: city is still a string
Keine Annotationen, und trotzdem sind alle Typen da.

Der Typ any bedeutet "irgendetwas". Eine any-Variable entzieht sich allen Prüfungen: TypeScript akzeptiert alles, ohne nachzusehen. Das ist, als würdest du den Sicherheitsgurt abnehmen: Der Code kompiliert, aber die Fehler kommen zur Laufzeit zurück - genau das, was TypeScript verhindern sollte.

TYPESCRIPT
let data: any = "hello";
data = 42; // accepted without complaint

// Compiles, but crashes at runtime:
// data.toUpperCase() does not exist on a number!
Mit any schaut TypeScript einfach weg.

Für einen Wert, dessen Typ wirklich unbekannt ist (eine Serverantwort, eine Nutzereingabe), nimm lieber unknown. Wie any akzeptiert es jeden Wert, aber es zwingt dich, den Typ zu prüfen (zum Beispiel mit typeof), bevor du ihn verwendest. Die Sicherheit bleibt also erhalten.

TYPESCRIPT
let value: unknown = "hello";

// console.log(value.toUpperCase()); -> rejected!

if (typeof value === "string") {
  console.log(value.toUpperCase()); // "HELLO"
}
unknown verlangt eine Prüfung vor der Verwendung.

Wissenscheck

Stelle sicher, dass du die wichtigsten Punkte dieser Lektion behalten hast.

  1. Was ist Typinferenz?
    • TypeScript erkennt den Typ anhand des Anfangswerts
    • TypeScript entfernt die Typen aus dem Programm
    • TypeScript wandelt Zahlen in Texte um
  2. Warum sollte any so weit wie möglich vermieden werden?
    • Es verlangsamt das Programm
    • Es schaltet die Prüfungen von TypeScript ab
    • Es ist von der Sprache verboten
    • Es funktioniert nur mit Zahlen
  3. Was musst du tun, bevor du einen Wert vom Typ unknown verwendest?
    • Seinen Typ prüfen, zum Beispiel mit typeof
    • Ihn in any umwandeln
    • Ihn ein zweites Mal deklarieren