Comment analyser un objet JSON en un objet TypeScript
Je suis en train d'essayer de convertir mon reçu Objet JSON dans un Tapuscrit de classe avec les mêmes attributs, et je ne peux pas le faire fonctionner. Ce que je fais mal?
Classe D'Employés
export class Employee{
firstname: string;
lastname: string;
birthdate: Date;
maxWorkHours: number;
department: string;
permissions: string;
typeOfEmployee: string;
note: string;
lastUpdate: Date;
}
Employé De La Chaîne De
{
"department": "<anystring>",
"typeOfEmployee": "<anystring>",
"firstname": "<anystring>",
"lastname": "<anystring>",
"birthdate": "<anydate>",
"maxWorkHours": <anynumber>,
"username": "<anystring>",
"permissions": "<anystring>",
"lastUpdate": "<anydate>"
//I will add note later
}
Ma Tentative
let e: Employee = new Employee();
Object.assign(e, {
"department": "<anystring>",
"typeOfEmployee": "<anystring>",
"firstname": "<anystring>",
"lastname": "<anystring>",
"birthdate": "<anydate>",
"maxWorkHours": 3,
"username": "<anystring>",
"permissions": "<anystring>",
"lastUpdate": "<anydate>"
});
console.log(e);
Lien vers Tapuscrit de l'aire de Jeux
source d'informationauteur moessi774
Vous devez vous connecter pour publier un commentaire.
La raison que le compilateur vous permet de convertir l'objet renvoyé de
JSON.parse
à une classe est parce que tapuscrit est basé sur des structures de sous-typage.Vous n'avez pas vraiment une instance d'un
Employee
, vous disposez d'un objet (comme vous le voyez dans la console) qui a les mêmes propriétés.Un exemple plus simple:
(code dans l'aire de jeux)
Il n'y a pas d'erreur parce que
a1
satisfait de typeA
car il a toutes ses propriétés, et lalogA
fonction peut être appelée avec aucun des erreurs d'exécution, même si ce qu'il reçoit n'est pas une instance deA
tant qu'il a les mêmes propriétés.Qui fonctionne très bien lorsque vos classes sont de simples objets de données et n'ont pas de méthodes, mais une fois que vous mettre en place des méthodes puis les choses ont tendance à se briser:
(code dans l'aire de jeux)
Modifier
Cela fonctionne bien:
(code dans l'aire de jeux)
Si vous essayez d'utiliser
JSON.parse
sur votre objet lorsqu'il n'est pas une chaîne de caractères:Vous obtenez le message d'erreur, car ce n'est pas une chaîne, c'est un objet, et si vous l'avez déjà dans cette forme, alors il n'y a pas besoin d'utiliser
JSON.parse
.Mais, comme je l'ai écrit, si vous allez de cette façon, alors vous n'aurez pas une instance de la classe, juste un objet qui a les mêmes propriétés que les membres de la classe.
Si vous voulez un exemple alors:
Si vous utilisez un Tapuscrit interface au lieu d'un classeles choses sont plus simples:
Si vous voulez un classecependant, de la fonderie simple ne fonctionne pas. Par exemple:
Pour une classe, vous aurez à écrire un constructeur qui accepte une chaîne JSON/objet, puis parcourir les propriétés à attribuer à chaque membre manuellement, comme ceci:
Vos données JSON ont certaines propriétés que vous n'avez pas dans votre classe. Pour la cartographie, Vous pouvez faire usage simple de cartographie
et aussi spécifier un constructeur dans votre
classe
Rappelez-vous: Forte typings est temps de compilation que depuis javascript ne le supporte pas.
Tout d'abord, vous devez être sûr que tous les attributs de ce qui vient de ce service sont nommés de la même façon dans votre classe. Ensuite, vous pouvez analyser l'objet et après que l'assigner à votre nouvelle variable, quelque chose comme ceci:
Essayer!