ProgrammierungFrontend-Entwickler

Beschreiben Sie die Unterschiede zwischen den Typen any, unknown und object in TypeScript. Wann sollten Sie jeden von ihnen verwenden? Geben Sie Beispiele für Code an.

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort.

In TypeScript werden die Typen any, unknown und object für unterschiedliche Szenarien verwendet und haben grundlegende Unterschiede:

  • any: Deaktiviert das Typsystem für eine Variable. Erlaubt alles mit der Variablen zu machen, ohne Kompilierungsfehler zu verursachen. Verwenden Sie es, wenn der Typ des Objekts im Voraus unbekannt ist und die Sicherheit nicht kritisch ist.
  • unknown: Akzeptiert ebenfalls jeden Typ, erfordert jedoch eine explizite Typprüfung/Typecasting für die Arbeit mit solchen Variablen. Sicherer als any. Verwenden Sie es für Werte mit unbekanntem Typ, um die Kontrolle über das Typisieren nicht zu verlieren.
  • object: Ein Typ nur für komplexe Objekte (Objekte, Arrays, Funktionen), jedoch nicht für primitive Typen (Zahlen, Strings). Beschränkt die Arbeit nur auf Objekte.

Beispielcode:

let a: any = 1; a = 'string'; // OK a(); // OK (kann jedoch zur Laufzeitfehler führen) let b: unknown = 'hello'; b = 5; // OK // b.toUpperCase(); // Fehler — Typprüfung erforderlich if (typeof b === 'string') { console.log(b.toUpperCase()); } let c: object = { key: 'value' }; c = [1, 2, 3]; // OK // c = 1; // Fehler, da '1' kein Objekt ist

Fangfrage.

Frage: Welchen Nutzen bringt der Typ unknown, wenn wir any verwenden können?

Antwort: unknown erhöht die Sicherheit des Codes - Sie können mit der Variablen keine ungeprüften Aktionen wie mit any durchführen. Es ist erforderlich, den Typ explizit zu prüfen oder zu casten, was viele Überraschungen zur Laufzeit ausschließt.

function handle(value: unknown) { // value.trim(); // Fehler if (typeof value === 'string') { value.trim(); } }

Beispiele für reale Fehler aufgrund mangelnden Wissens über die Feinheiten des Themas.


Geschichte

Im Projekt wurde beschlossen, schnell eine externe Bibliothek zu integrieren, indem ihr Ergebnis über any beschrieben wurde, um sich nicht um Typen kümmern zu müssen. In der Folge stellte sich zur Laufzeit heraus, dass die Bibliothek kein Array, sondern ein Objekt mit Feldern zurückgab, was zu massiven Fehlern bei der Verwendung der Methode .map() führte - dieser Code kompilierte, fiel jedoch zur Ausführung.


Geschichte

Einer der Entwickler verwendete unknown für Daten vom Backend, fügte jedoch keine Typprüfung hinzu, bevor er mit den Feldern arbeitete. Infolgedessen kompilierte TypeScript den Code nicht - und es musste schnell auf any gewechselt werden, was potenzielle Parsing-Fehler verbarg und zu Bugs in der Produktion aufgrund eines inkorrekten Datenformats führte.


Geschichte

Bei der Arbeit mit dem Typ object gab es Verwirrung: Es wurde versucht, der Variable vom Typ object Werte string und number zuzuweisen. Obwohl während der Entwicklungsphase keine Probleme bemerkt wurden, wurden im Peer-Review Fehler festgestellt, die damit zusammenhingen, dass Objektmethoden nicht mit primitiven Datentypen arbeiteten. Es wurde zusätzliche Zeit benötigt, um dies zu beheben.