Búsqueda de sitios web

angular - ¿mejor práctica para devolver 2 tipos diferentes en una función de typescript?


Tengo una función de API que realiza un POST y devuelve un Observable de ModelAResponse (interfaz que tengo)

Quiero devolver un Observable de ModelAResponse o B según el estado devuelto.

estos son mis dos modelos de respuesta:

export interface ModelAResponse {
  res: ModelA;
}

export interface ModelBResponse {
  res: ModelB
}

(ModelA, ModelB son interfaces que se colocan en otra clase)

así que actualmente solo estoy soportando un retorno del modelo a:

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

¿Cómo puedo cambiar esta función para que devuelva ya sea ModelAResponse o ModelBResponse según el estado de la mejor manera práctica en TypeScript?

Respuesta #1

No puedes hacer esto. TypeScript solo puede tipar cosas basándose en el análisis estático en tiempo de compilación, lo que estás describiendo requeriría que TypeScript conociera el resultado de tu llamada a la API en tiempo de compilación, lo cual no hace.

Lo mejor que puedes hacer es indicar que tu llamada a la API puede devolver cualquiera de tus interfaces:

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

Pero eso aún requerirá que averigues si es A o B en tiempo de ejecución.

Artículos relacionados