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.
