TypeScript distingue i tipi primitivi (string, number, boolean) e i loro wrapper oggettivi (String, Number, Boolean). I wrapper sono oggetti creati tramite costruttori:
const primitive: string = 'hello'; const wrapper: String = new String('hello');
primitive === wrapper — il risultato è false:console.log('hello' === new String('hello')); // false
string, non String).È possibile utilizzare i tipi wrapper (
String,Number,Boolean) nelle interfacce TypeScript, se i valori sono primitivi?
Risposta: Non si raccomanda di usare i wrapper: nella maggior parte dei casi i valori saranno primitivi e l'ereditarietà diretta di un'interfaccia dal tipo wrapper darà luogo a errori. È meglio utilizzare sempre string, number, boolean.
Storia
In un'app web per la memorizzazione di nomi e cognomi è stato utilizzato il tipo String nell'interfaccia utente. Questo ha portato a errori di confronto e al fallimento di test unitari che richiedevano tipi identici (i primitivi e i loro wrapper differiscono per identità).
Storia
Un sviluppatore di libreria ha tipizzato una funzione generica tramite Number, e i clienti della libreria hanno passato valori primitivi, creando problemi con il metodo type guards, che non hanno funzionato inaspettatamente per i primitivi. È emerso un errore complesso da debuggare a causa della conversione dei tipi.
Storia
In un servizio analitico è stato utilizzato il tipo Boolean per il flag di attività dell'utente, e il risultato del confronto durante la filtrazione dei dati è stato sempre false, anche se visivamente i valori coincidevano. Questo ha causato una gestione errata dei dati e il fallimento dei report.