immutable.js - Immutabel lista och Typescript korrekt sätt att definiera en array av objekt med typ


Här är mina JSON-data som jag får från servern

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

]

Jag vill definiera ett oföränderligt listobjekt som använder detta interface

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

Jag försökte något liknande detta men det fungerar inte :

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

och sedan använda angular $http

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

Men då är myObjectList-variabeln exakt samma som JSON, istället vill jag behålla det oföränderliga listobjektet och på något sätt föra in datan i det med min specifika typ. Med andra ord, om JSON-objekten inte är exakt som interface myObject, bör det returnera ett fel

Jag försökte också detta men då får jag ett TypeScript-fel

$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>'

Svar #1

Ditt första försök tilldelar inte en oföränderlig lista, det tilldelar de exakta uppgifterna till myObjectList.

Ditt andra försök är korrekt, felet du får beror på att kompilatorn inte kan härleda responstypen.
Försök:

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