Assurer la conformité des objets avec l'interface : supprimer les propriétés superflues
Les interfaces TypeScript définissent les spécifications contractuelles pour les classes ou les objets. Cependant, lors de l'implémentation, des propriétés supplémentaires peuvent être ajoutées au-delà de celles définies par l'interface, entraînant des incohérences. Résoudre ce problème devient crucial, en particulier lors du passage d'objets réduits via angulaire.toJson pour une communication RESTful.
Considérons une interface MyInterface avec un test de propriété unique :
<code class="typescript">interface MyInterface { test: string; }</code>
Et sa mise en œuvre avec un test de propriété supplémentaire property newTest :
<code class="typescript">class MyTest implements MyInterface { test: string; newTest: string; }</code>
Question :
Comment pouvons-nous garantir que l'objet réduit, lorsqu'il est attribué à partir d'un objet comme MyTest, ne contient que les propriétés déclarées dans MyInterface , à l'exclusion de newTest ?
Réponse :
Malheureusement, il n'est pas possible de supprimer directement les propriétés superflues d'un objet au moment de l'exécution en se basant uniquement sur une définition d'interface. Les interfaces dans TypeScript servent de construction au moment de la conception et leurs propriétés ne sont pas facilement disponibles lors de l'exécution.
Une solution potentielle suggérée consiste à définir « l'interface » en tant que classe, fournissant ainsi une implémentation d'exécution. Cela nous permet d'exploiter Lodash pour sélectionner uniquement les propriétés souhaitées de l'objet d'entrée :
<code class="typescript">class MyInterface { test: string = undefined; }</code>
<code class="typescript">import _ from 'lodash'; const before = { test: "hello", newTest: "world"}; let reduced = new MyInterface(); _.assign(reduced , _.pick(before, _.keys(reduced))); console.log('reduced', reduced)//contains only 'test' property</code>
En employant cette méthode, nous pouvons extraire efficacement les propriétés spécifiées, créant ainsi un objet qui adhère à l'interface. contrat et est prêt pour la sérialisation via angulaire.toJson.
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!