2017-02-22 58 views
1

從1個背景的聲明模型,我曾經有過我的所有車型聲明爲波蘇斯和我的Web API調用返回的數據。Angular2和打字稿做我需要爲每個API調用

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

現在有了Angular2和Typescript,我有兩個選擇。我可以使用map並獲取JSON對象並將其分配給組件中的屬性,然後在視圖中使用它。

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

否則,我可以使用不同的映射函數將其映射到強類型對象。但是如果我走在這條路上,我將不得不在後臺定義完整的域模型。再加上一套方法來映射它們。我覺得這是一個太多的工作和重複。另一方面,如果我使用JSON,那麼我將失去類型安全性。

你對這個想法。謝謝你的時間。 (我用角2.4和2.1.5打字稿)

+0

撥打服務打電話給你的API .. –

回答

0

您可以只投完全匹配的JSON接口。這樣你會得到自動完成和編譯錯誤,但是你不需要實現任何方法。運行時會忽略接口。因此,您在運行時不會獲得任何類型的安全性。

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

是 ' r.json()' 和 'r.json()作爲邁德特' 是一樣的嗎?首先startement也類型化json響應int類型?我會感謝你回覆@Gunter –

+1

是的,兩者都是一樣的。不確定你的意思是「首先startement也類型化json響應int類型?」 –

+0

抱歉錯字錯誤,但我得到了答案。 –