ProgrammierungBackend-Entwickler / TypeScript-Architekt

Wie werden Wrapper-Typen in TypeScript implementiert und wozu werden sie verwendet? Welche Probleme treten bei der Arbeit mit primitiven Typen und ihren Wrappern auf?

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

Antwort

TypeScript unterscheidet zwischen primitiven Typen (string, number, boolean) und deren Objekt-Wrappern (String, Number, Boolean). Wrapper sind Objekte, die durch Konstruktoren erstellt werden:

const primitive: string = 'hello'; const wrapper: String = new String('hello');
  • Primitive — einfach, effizient, haben keine Methoden oder Eigenschaften außer den eingebauten.
  • Objekt-Wrapper — Objekte mit entsprechenden Methoden/Eigenschaften, selten in der Geschäftslogik angewendet.
  • Bei einem Vergleich primitive === wrapper ist das Ergebnis false:
console.log('hello' === new String('hello')); // false
  • Bei der Typisierung sollten Sie immer versuchen, primitive Typen (string statt String) zu verwenden.
  • Wrapper sind nur erforderlich, wenn mit der generic-API von Bibliotheken gearbeitet wird (z.B. für Reflexion oder Metaprogrammierung).

Fangfrage

Kann man Wrapper-Typen (String, Number, Boolean) in TypeScript-Schnittstellen verwenden, wenn die Werte primitive sind?

Antwort: Es wird nicht empfohlen, Wrapper zu verwenden: In den meisten Fällen sind die Werte primitive Typen, und die direkte Ableitung einer Schnittstelle von einem Wrapper-Typ führt zu Fehlern. Es ist besser, immer string, number, boolean zu verwenden.

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


Geschichte

In einer Webanwendung zur Speicherung von Namen wurde der Typ String in der Benutzerschnittstelle verwendet. Dies führte zu Vergleichsfehlern und falschem Bestehen von Unit-Tests, die identische Typen erforderten (primitive und ihre Wrapper unterscheiden sich in der Identität).


Geschichte

Ein Bibliothekar hat eine generische Funktion über Number typisiert, und Bibliothekskunden reichten primitive Werte ein, was Probleme mit der Methode type guards verursachte, die unerwartet für Primitiven nicht funktionierten. Es entstand ein schwer verständlicher Typumwandlungsfehler.


Geschichte

In einem Analysedienst wurde der Typ Boolean für das Aktivitätsflag eines Benutzers verwendet, und das Ergebnis des Vergleichs bei der Datenfilterung war immer false, obwohl die Werte visuell übereinstimmten. Dies führte zu einer fehlerhaften Datenverarbeitung und einem Absturz von Berichten.