【问题标题】:best practice for returning 2 different types in typescript function?在 typescript 函数中返回 2 种不同类型的最佳实践?
【发布时间】:2017-08-28 21:24:30
【问题描述】:

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

我想要两个根据返回的状态返回 ModelAResponse 或 B 的 Observable。

这是我的两个响应模型:

export interface ModelAResponse {
  res: ModelA;
}

export interface ModelBResponse {
  res: ModelB
}

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

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

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

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

【问题讨论】:

  • 创建两个模型都实现的接口并返回该接口的Observable...

标签: angular typescript rxjs angular2-observables


【解决方案1】:

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

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

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

但这仍然需要您在运行时确定它是 A 还是 B

【讨论】:

  • 是否可以不等待运行时找出类型来做到这一点?
  • 如果你的类型是由响应的状态决定的,并且响应发生在运行时,你怎么能在构建时获得这些信息?
  • 我也有同样的问题,响应类型是 Axios.AxiosXHR | { 取消:布尔},无法区分...任何机构可以帮助我.....尝试像这样访问 if (response.data && response.status && response.status === 200) {,出现错误关于数据或状态.....
猜你喜欢
  • 2018-12-22
  • 2019-07-12
  • 1970-01-01
  • 2018-04-23
  • 1970-01-01
  • 2020-12-13
  • 2022-06-14
  • 2015-07-27
  • 2018-03-26
相关资源
最近更新 更多