Maison > interface Web > js tutoriel > le corps du texte

Comment réduire les objets JavaScript aux seules propriétés d'interface dans TypeScript ?

Patricia Arquette
Libérer: 2024-10-31 06:12:01
original
634 Les gens l'ont consulté

How to Reduce JavaScript Objects to Only Interface Properties in TypeScript?

Réduction des objets JavaScript en propriétés d'interface

Lorsque nous travaillons avec TypeScript, nous rencontrons souvent le besoin de réduire les objets JavaScript pour ne contenir que des propriétés déclarées dans une interface. Ceci est particulièrement utile lors de l'envoi de données à des services REST qui attendent un schéma spécifique.

Considérez l'interface suivante :

<code class="typescript">interface MyInterface {
  test: string;
}</code>
Copier après la connexion

Et une implémentation qui inclut une propriété supplémentaire :

<code class="typescript">class MyTest implements MyInterface {
  test: string;
  newTest: string;
}</code>
Copier après la connexion

Le problème survient lorsque nous essayons d'utiliser la méthode toJson d'Angular pour sérialiser l'instance MyTest afin de l'envoyer à un service REST. La méthode toJson inclut la propriété newTest, qui ne fait pas partie de l'interface. Cela peut entraîner des erreurs côté serveur.

Pour résoudre ce problème, nous devons trouver un moyen de réduire l'instance MyTest pour qu'elle ne contienne que les propriétés déclarées dans l'interface MyInterface. Cependant, cela n'est pas possible directement car les interfaces dans TypeScript sont essentiellement des espaces réservés qui n'ont aucune représentation à l'exécution.

Au lieu de cela, nous pouvons utiliser une solution de contournement. Une approche consiste à définir l'interface comme une classe avec des initialiseurs de propriétés :

<code class="typescript">class MyInterface {
  test: string = undefined;
}</code>
Copier après la connexion

En utilisant cette classe comme interface, nous pouvons ensuite utiliser une bibliothèque telle que Lodash pour sélectionner uniquement les propriétés qui correspondent à l'interface :

<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); // { test: "hello" }</code>
Copier après la connexion

Cette solution réduit efficacement l'instance MyTest pour inclure uniquement les propriétés déclarées dans l'interface MyInterface, offrant ainsi une solution simple et pragmatique au défi.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!