4

Je n'arrive pas à comprendre l'erreur que j'obtiens sur mon application client. Je m'abonne à un abonnement graphql et je suis capable de récupérer les mises à jour mais je ne suis pas en mesure de pousser les changements au tableau de typescript appelé "models: ModelClass []" qui est lié à la vue.TypeError non intercepté: Impossible d'ajouter la propriété 12, l'objet n'est pas extensible

Y at-il quelque chose qui me manque ou qui ne va pas?

models.component.ts

this.apollo.subscribe({ 
    query: gql` 
    subscription { 
     newModelCreated{ 
     _id 
     name 
     type 
     train_status 
     deploy_status 
     data_path 
     description 
     created_at 
     updated_at 
     } 
    } 
    ` 
}).subscribe((data) => { 
    console.log("CREATED: " + JSON.stringify(data.newModelCreated)); 
    console.log(data.newModelCreated); 
    var temp:ModelClass = data.newModelCreated; 
    this.models.push(temp); 
}); 

modèle-class.ts

export interface ModelClass { 
    _id: string; 
    name: string; 
    type: string; 
    parameters: { 
     alpha: number; 
    }; 
    train_status: string; 
    deploy_status: string; 
    test_accuracy: string; 
    created_at: number; 
    updated_at: number; 
} 
+0

D'ailleurs j'ai trouvé que les deux objets ne sont pas compatibles! – micronyks

+0

quel est le type de «modèles»? – micronyks

+0

models: ModelClass [] – cyberbeast

Répondre

0

Je suppose que this.models est un tableau retourné par Apollo et vous voulez ajouter de nouvelles créé objet à votre tableau initial? Si c'est vrai, Apollo retourne un objet immuable!

Vous devez cloner le tableau retourné initial. Quelque chose comme dans la fonction abonnez-vous:

this.apollo 
    .watchQuery({query: INITIAL_GQL_REQUEST}) 
    .subscribe((data) => { 
     this.models = data.models.map((model) => { 
      return { 
       id: model.id, 
       name: model.name, 
       another: model.another 
      } 
     }) 
    }; 
}); 

Ensuite, votre demande d'abonnement sera en mesure d'ajouter un modèle créé à cette plaine tableau javascript. PS: Je ne suis pas sûr mais je suppose qu'Apollo renvoie des objets immuables car ils sont stockés dans le magasin et selon votre politique de récupération, il peut manquer des hits de magasin si vous êtes capable de les muter.

J'espère que ça aide