2017-02-17 4 views
0

Ich habe Array von Objekt, jedes Objekt enthält;große json-Objekt zu Modellobjekt in Typoskript zuordnen

{ 
Id:"..", 
name:"..", 
foo1:"..", 
foo2:"..", 
... 
} 

Ich brauche nur 2 Eigenschaften dieser Elemente, also habe ich eine Schnittstelle erstellt;

export interface IMenuModel{ 
    Id:number; 
    name?:string;  
} 

und Abrufen von Daten innerhalb dieser Methode unter:

fetch(`..`).then((response: Response): Promise<{ value:IMenuModel[] }> => { 
        return response.json(); 
       }) 
       .then((response: { value: IMenuModel[] }): void => { 
        debugger //expected response is array of IMenuModel but it still contains all properties 

Ich erwarte, dass diese Antwort Objekt als Array von meinem benutzerdefinierten Modell (IMenuModel), aber es enthält immer noch alle von entfernten Quelle abgerufen Eigenschaften.

Ich kann sie mit ".map()" -Funktion zupfen, das ist in Ordnung, aber es gibt Rückgabetyp definiert, um zu funktionieren (response: { value: IMenuModel[] }), also sollte ich dies nicht tun (oder muss ich es jedes Mal manuell zuordnen).

Warum noch Antwort nicht in meinem Objektmodell und was ist der effizienteste Weg, dies zu erreichen?

Antwort

1

TypeScript ist meist eine Typ-Ebene über JavaScript. Diese Typisierungen ändern das typisierte Objekt nicht. Beim Einlesen in JavaScript werden die Typings einfach weggelassen. Wenn Sie eine Schnittstelle (oder mehrere Schnittstellen) auf Ihr JSON-Objekt anwenden, ändern Sie nicht die Art des Objekts, sondern nur die Garantien dieser Schnittstelle.

Also, wenn Sie Ihre IMenuModel Schnittstelle definieren und es auf Ihre importierte Objekt Sie sagen: „Ich weiß, und ich kann garantieren, dass das gegebene Objekt die Mitglieder in der Schnittstelle definiert ist, schafft“ Diese Garantie wird von Ihrem Objekt erfüllt, daher ist dort alles in Ordnung. Das Objekt wird jedoch immer noch in seiner vollen Pracht übertragen und restauriert. Betrachten Sie die Schnittstellen als Minimum Garantien, nicht als vollständige Beschreibungen des Objekts.

Wenn Sie die zusätzlichen Mitglieder des Objekts nicht möchten, ist Ihre einzige Option, den Server nur die Teile des Objekts senden zu lassen, die Sie benötigen. Wenn Sie das nicht können, müssen Sie sich keine Sorgen machen, da Ihr Objekt die Mindestanforderungen der Schnittstelle erfüllt. Ignoriere einfach die zusätzlichen Werte.

+0

Ja, es macht jetzt mehr Sinn, danke. – TyForHelpDude

Verwandte Themen