immutable.js - Liste immuable et Typescript façon correcte de définir un tableau d'objets avec type


Voici mes données JSON que je reçois du serveur

[
  {
    "property1": 1,
    "property2": "asd",
    "property3": 2
  },
  {
    "property1": 1,
    "property2": "asd",
    "property3": 2
  },
  {
    "property1": 1,
    "property2": "asd",
    "property3": 2
  }

]

Je veux définir un objet Liste Immutable qui utilise cette interface

export interface myObject {
    propert1: number,
    propert2: string,
    propert3: number
}

J'ai essayé quelque chose comme ça mais ça ne fonctionne pas :

private myObjectList: Immutable.List<myObject> = Immutable.List([]);

et ensuite en utilisant angular $http

$http.get('my url to the json').then(function(data){
   this.myObjectList = data.data;
});

Mais ensuite, la variable myObjectList est exactement la même que le json, alors que je veux plutôt garder l'objet Liste Immutable et d'une manière ou d'une autre y insérer les données avec mon Type spécifique. En d'autres termes, si les objets JSON ne correspondent pas exactement à l'interface myObject, cela devrait retourner une erreur

J'ai aussi essayé cela mais ensuite j'obtiens une erreur TypeScript

$http.get('my url to the json').then(function(data){
   this.myObjectList = Immutable.List(data.data);
});

error: Type 'List<{}>' is not assignable to type 'List<Queries>'

Réponse #1

Votre première tentative n'assigne pas une liste immuable, elle assigne les données exactes à myObjectList.

Votre deuxième tentative est correcte, l'erreur que vous obtenez est due au fait que le compilateur ne peut pas déduire le type de réponse.
Essayez :

$http.get('my url to the json').then(function(data){
   this.myObjectList = Immutable.List(data.data as Queries);
});