2017-04-03 40 views
2

我有一個API函數,執行一個職位,並返回ModelAResponse(我有接口)的Observable在打字稿功能中返回2種不同類型的最佳做法?

我希望兩個基於返回的狀態返回ModelAResponse或B的Observable。

這是我的兩個響應模型:

export interface ModelAResponse { 
    res: ModelA; 
} 

export interface ModelBResponse { 
    res: ModelB 
} 

(MODELA,ModelB是放在另一個類接口)

所以目前即時通訊支持模型的只有一個返回:

public myApiFunc(req: MyRequestModel): Observable<ModelAResponse> { 
     ... 
this.http.post("my/api/path", req, {headers: myHeaders}), 
     (jsonReturned) => status === 200 ? {res: jsonReturned} : undefined); 
     ... 
} 

我該如何改變這個func返回ModelAResponse或ModelBResponse是基於打字稿最佳實踐方式中的狀態?

+0

創建一個接口,這兩個模型實現並返回該接口的'Observable' ... –

回答

2

你不能這樣做。 Typescript只能在構建時基於靜態分析才能輸入內容,您的描述需要Typescript在構建時知道API調用的結果,而不是這樣做。

你能做的最好的是表明你的API調用可以返回你的接口之一:

public myApiFunc(req: MyRequestModel): Observable<ModelAResponse | ModelBResponse> 

但是,這仍然需要如果在運行時AB你要弄清楚。

+0

是否有可能在不等待運行時找出類型的情況下執行它? –

+0

如果您的類型由響應的狀態決定,並且響應在運行時發生,那麼您如何在構建時獲取該信息? – adharris

+0

我也有同樣的問題,響應類型是Axios.AxiosXHR | {取消:布爾},無法區分...可以任何身體幫助我.....試圖訪問像這樣if(response.data && response.status && response.status === 200){,獲取錯誤數據或狀態..... –