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 === wrapper ist das Ergebnis false:console.log('hello' === new String('hello')); // false
string statt String) zu verwenden.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.
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.