Réduction d'objet à la conformité d'interface
Dans TypeScript, une interface définit un contrat pour les propriétés d'un objet, tandis qu'une classe implémente cette interface. Cependant, il est courant de rencontrer des objets avec des propriétés supplémentaires au-delà de celles définies dans une interface, ce qui peut poser des problèmes lors de l'utilisation d'outils comme JSON.stringify() qui convertissent les objets en JSON.
Pour résoudre ce problème, il est nécessaire de réduire un objet tel qu'il ne contient que les propriétés de l'interface qu'il implémente.
Problème :
Lors de la tentative de conversion d'un objet avec des propriétés supplémentaires en JSON à l'aide de JSON.stringify( ), les propriétés supplémentaires sont incluses dans la sortie, invalidant potentiellement le JSON.
Solution 1 :
En raison du fait que les interfaces TypeScript n'ont pas de représentation d'exécution et donc ne peut pas être utilisé pour appliquer des restrictions de propriété, une solution de contournement est nécessaire. En définissant l'interface en tant que classe, nous pouvons utiliser une bibliothèque comme Lodash pour sélectionner uniquement les propriétés définies dans l'interface à partir de l'objet cible.
Par exemple :
<code class="typescript">import _ from 'lodash'; const reducedObj = new MyInterface(); _.assign(reducedObj, _.pick(originalObj, _.keys(reducedObj)));</code>
Cette méthode garantit que l'objet réduit ne contient que les propriétés définies dans l'interface.
Solution 2 :
Comme une autre approche, on peut parcourir manuellement les propriétés de l'objet cible, en vérifiant si chaque propriété existe dans la définition de l'interface. Si c'est le cas, la propriété est ajoutée à l'objet réduit. Cette méthode nécessite une attention particulière pour éviter d'ajouter des propriétés involontaires.
Bien qu'il n'existe aucun moyen direct de garantir la conformité des propriétés avec les interfaces TypeScript en JavaScript, ces solutions de contournement fournissent des solutions pratiques pour réduire les objets afin qu'ils se conforment aux définitions d'interface.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!