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');
primitive === wrapper is het resultaat false:console.log('hello' === new String('hello')); // false
string in plaats van String).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.
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.