在打字稿函数中返回两种不同类型的最佳实践?

jac*_*iao 4 rxjs typescript angular2-observables angular

我有一个 api 函数,它执行 post 并返回 ModelAResponse 的 Observable (我拥有的接口)

我希望两个根据返回的状态返回 ModelAResponse 或 B 的 Observable。

这是我的两个响应模型:

export interface ModelAResponse {
  res: ModelA;
}

export interface ModelBResponse {
  res: ModelB
}
Run Code Online (Sandbox Code Playgroud)

(ModelA、ModelB是放置在另一个类中的接口)

所以目前我只支持模型 a 的一次返回:

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

如何更改此函数以根据打字稿最佳实践方式的状态返回 ModelAResponse 或 ModelBResponse?

adh*_*ris 6

你不能这样做。Typescript 只能在构建时基于静态分析来键入内容,您的描述需要 Typescript 在构建时知道 API 调用的结果,但它不会这样做。

您能做的最好的事情就是表明您的 API 调用可以返回您的任一接口:

public myApiFunc(req: MyRequestModel): Observable<ModelAResponse | ModelBResponse>
Run Code Online (Sandbox Code Playgroud)

但这仍然需要您在运行时弄清楚它是否A是 或B