ProgrammationDéveloppeur Backend / Architecte TypeScript

Comment les types d'emballage (Wrapper types) sont-ils réalisés et à quoi servent-ils dans TypeScript ? Quels problèmes se posent lors de l'utilisation des types primitifs et de leurs emballages ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse

TypeScript distingue les types primitifs (string, number, boolean) et leurs objets d'emballage (String, Number, Boolean). Les emballages sont des objets créés via des constructeurs :

const primitive: string = 'hello'; const wrapper: String = new String('hello');
  • Primitifs — simples, efficaces, n'ont pas de méthodes et de propriétés en dehors de celles intégrées.
  • Obj-emballages — objets avec des méthodes/propriétés correspondantes, rarement utilisés dans la logique métier.
  • Lors de la comparaison primitive === wrapper — le résultat est false :
console.log('hello' === new String('hello')); // false
  • Lors de la typage, essayez toujours d'utiliser des primitifs (string, pas String).
  • Les emballages ne sont applicables que lorsque vous devez travailler avec des bibliothèques d'API génériques (par exemple, pour la réflexion ou la métaprogrammation).

Question piège

Peut-on utiliser des types d'emballage (String, Number, Boolean) dans les interfaces TypeScript si les valeurs sont des primitifs ?

Réponse : Il n'est pas recommandé d'utiliser des emballages : dans la plupart des cas, les valeurs seront des primitifs, et l'héritage direct de l'interface à partir du type d'emballage entraînera des erreurs. Il est donc préférable d'utiliser toujours string, number, boolean.

Exemples d'erreurs réelles dues à l'ignorance des nuances du sujet


Histoire

Dans une application Web pour stocker des noms complets, le type String a été utilisé dans l'interface utilisateur. Cela a entraîné des erreurs de comparaison et un échec des tests unitaires nécessitant des types strictement identiques (les primitifs et leurs emballages diffèrent par leur identité).


Histoire

Un développeur de bibliothèque a typé une fonction générique avec Number, et les clients de la bibliothèque ont passé des valeurs primitives, ce qui a causé des problèmes avec la méthode type guards, qui n'a pas fonctionné pour les primitifs comme prévu. Il en a résulté une erreur de conversion de type difficile à déboguer.


Histoire

Dans un service d'analyse, le type Boolean a été utilisé pour le drapeau d'activité d'un utilisateur, et le résultat de la comparaison lors du filtrage des données était toujours false, bien que visuellement les valeurs semblaient identiques. Cela a provoqué un traitement incorrect des données et une chute des rapports.