ProgrammatieBackend ontwikkelaar / TypeScript architect

Hoe worden wrapper types in TypeScript geïmplementeerd en waarvoor worden ze gebruikt? Welke problemen ontstaan er bij het werken met primitieve types en hun wrappers?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord

TypeScript maakt onderscheid tussen primitieve types (string, number, boolean) en hun object wrappers (String, Number, Boolean). Wrappers zijn objecten die zijn gemaakt met constructors:

const primitive: string = 'hello'; const wrapper: String = new String('hello');
  • Primitieven — eenvoudig, efficiënt, hebben geen methoden en eigenschappen behalve ingebouwde.
  • Obj-wraps — objecten met bijbehorende methoden/eigenschappen, zelden gebruikt in bedrijfslogica.
  • Bij vergelijking primitive === wrapper is het resultaat false:
console.log('hello' === new String('hello')); // false
  • Probeer altijd primitieve types te gebruiken (string in plaats van String).
  • Wrappers zijn alleen toepasbaar wanneer je werkt met generic-API-bibliotheken (bijvoorbeeld voor reflectie of metaprogrammering).

Vraag met een valkuil

Mag je wrapper types (String, Number, Boolean) gebruiken in TypeScript interfaces, als de waarden primitieve zijn?

Antwoord: Het wordt niet aanbevolen om wrappers te gebruiken: in de meeste gevallen zullen de waarden primitief zijn, en directe overerving van een interface van een wrapper type zal leiden tot fouten. Het is beter om altijd string, number, boolean te gebruiken.

Voorbeelden van echte fouten door gebrek aan kennis over de nuances van het onderwerp


Verhaal

In een webapplicatie voor het opslaan van volledige namen werd het type String gebruikt in de gebruikersinterface. Dit leidde tot vergelijkingsfouten en een onjuiste uitvoering van unit-tests die strikte identieke types vereisten (primitieven en hun wrappers verschillen in identiteit).


Verhaal

Een bibliotheekontwikkelaar typeerde een generic functie met Number, en klanten van de bibliotheek gaven primitieve waarden door, wat leidde tot problemen met de type guards-methode, die onverwacht niet werkte voor primitieven. Dit resulteerde in een moeilijke fout bij typecasting.


Verhaal

In een analytische dienst werd het type Boolean gebruikt voor de actieve gebruiker vlag, en het vergelijkingsresultaat bij het filteren van gegevens was altijd false, hoewel de waarden visueel overeenkwamen. Dit veroorzaakte onjuiste gegevensverwerking en het ineenstorten van rapporten.