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');
primitive === wrapper — le résultat est false :console.log('hello' === new String('hello')); // false
string, pas String).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.
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.