2017-04-03 94 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){,获取错误数据或状态..... –