Maison  >  Article  >  interface Web  >  Comment s'assurer qu'un objet ne contient que des propriétés définies dans son interface lors de son passage via angulaire.toJson ?

Comment s'assurer qu'un objet ne contient que des propriétés définies dans son interface lors de son passage via angulaire.toJson ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-31 16:28:02128parcourir

How can we ensure that an object only contains properties defined in its interface when passing it through angular.toJson?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn