angular - Angular2 i Typescript, trebam li deklarirati modele za svaki API poziv


Dolazeći iz Angular 1 okruženja, navikao sam sve svoje modele deklarirati kao POCO-e, a moji web api pozivi su vraćali podatke.

 datacontext.query('api/OwnerData/GetOwners').then(function (d) {
            vm.domain = d;
}

Sada s Angular2 i Typescript, imam dvije opcije. Ili mogu koristiti mapu i dobiti JSON objekt te ga dodijeliti svojstvu u komponenti, a zatim ga koristiti u prikazu.

this.http.get(`/api/OwnerData/GetOwners`, { headers: this.getHeaders() })
        .map(r => r.json())
        .catch(handleError);

Inače, mogu koristiti drugačiju funkciju mapiranja kako bih to mapirao na objekt snažno tipiziran. Ali ako krenem tim putem, morat ću definirati cijeli domen model u back endu u TypeScriptu. Plus seriju metoda za njihovo mapiranje. Osjećam da je to previše posla i ponavljanja. S druge strane, ako idem s JSON-om, izgubio bih sigurnost tipa.

Koja su vaša mišljenja o ovome. Hvala na vašem vremenu. (koristim Angular 2.4 i Typescript 2.1.5)

Odgovor #1

Možete jednostavno izvršiti pretvorbu u sučelja koja točno odgovaraju JSON-u. Na taj način dobivate automatsko dovršavanje i pogreške pri kompajliranju, ali ne trebate implementirati nikakve metode. Sučelja se zanemaruju u vrijeme izvođenja. Stoga ne dobivate nikakvu sigurnost tipova u vrijeme izvođenja.

interface MyData {
  a:string;
  b:number;
}
this.http.get(`/api/OwnerData/GetOwners`, { headers: this.getHeaders() })
    .map(r => r.json() as MyData)
    .catch(handleError);