ProgrammazioneSviluppatore Backend / Architetto TypeScript

Как реализуются и для чего используются типы-обёртки (Wrapper types) в TypeScript? Какие проблемы возникают при работе с примитивами и их обёртками?

Supera i colloqui con l'assistente IA Hintsage

Ответ

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');
  • Primitivi — semplici, efficienti, non hanno metodi e proprietà oltre a quelli integrati.
  • Obj-wraps — oggetti con metodi/proprietà corrispondenti, raramente utilizzabili nella logica aziendale.
  • Quando confronti primitive === wrapper — il risultato è false:
console.log('hello' === new String('hello')); // false
  • Nella tipizzazione cerca sempre di utilizzare i primitivi (string, non String).
  • I wrapper sono utili solo quando è necessario lavorare con librerie generic-API (ad esempio, per riflessione o metaprogrammazione).

Domanda insidiosa

È 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.

Esempi di errori reali a causa della mancanza di consapevolezza delle sottigliezze dell'argomento


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.