angular2-map-Daten bestimmter Objekt-Typ
Ich erstellte eine sehr einfache app, basierend auf der Angular2 tutorial.
Starten, ich habe eine sehr einfache "Buch-Modell":
/**
* book model
*/
export class Book {
public data;
/**
* constructor
* @param id
* @param title
* @param pages
*/
constructor(
public id,
public title:string,
public pages:Array
){
alert('it works'); //just a check
}
}
In meinem Dienst, ich bekomme ein Buch wie dieses:
return this._http.get('getBook/1')
.map(function(res){
return <Book> res.json();
})
Meine Erwartung war, dass dies würde zu erhalten, die daraus resultierende JSON-Daten und "Karte", um es in ein Buch Objekt.
Jedoch, es gibt nur ein Objekt vom Typ "Object".
Konnte ich erstellen ein neues Buch-Objekt selbst, und übergeben Sie die Parameter in den Konstruktor, wie folgt:
return new Book(res.id, res.title, res.pages);
Ist dies der beste Weg, dies zu tun? Hab ich was verpasst?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, die Umwandlung eines Objekts zu einem Typ im Typoskript nicht erstellen Sie eine Instanz dieses Typs. Es ist nur eine Anlage der Niederschrift für die Typprüfung.
Wenn Sie wollen tatsächlich eine Instanz
Book
Sie brauchen, um so etwas wie, dass:Um Ihre Frage zu beantworten. In der Tat, wenn Sie nur Felder besitzen, die in Ihrer Art (mit einer Schnittstelle zum Beispiel), Gießen ist genug. Außerdem haben Sie Methoden, die Sie möchten, um Sie später zu verwenden, ist es notwendig, implizit erstellen Sie eine Instanz der
Book
- Typ (siehe oben) statt casting. Andernfalls werden Sie nicht in der Lage, Sie zu benutzen (Sie werden nicht definiert, die auf Ihr Objekt)...Sehen, diese Frage für mehr details:
Gute Praxis ist, zum verarbeiten von Daten von GET response mit
(Bezug auf Winkel-Dokumentation https://angular.io/guide/http)
Und dann:
//Importe
//im Konstruktor Parameterliste
//service Methode
Ich denke, Sie sollten erklären, eine Schnittstelle
Book
statt Klassebook
:In Ihren Dienst: