nestia icon indicating copy to clipboard operation
nestia copied to clipboard

[WIP] Support Observable return types for Nestia SDK

Open Copilot opened this issue 7 months ago • 0 comments

Thanks for assigning this issue to me. I'm starting to work on it and will keep this PR's description up to date as I form a plan and make progress.

Original issue description:

Feature Request

When using the Nestia Client SDK, it can properly infer the controller method return value types when returning synchronously or returning a Promise. However, if we try to return an Observable, then the SDK is not able to generate types properly.

Since NestJS has first-class support for Observables, many times we work with Observables exclusively and would just like to return the Observable from the controller method instead of converting it to a Promise and then returning the Promise. However, returning an Observable type breaks Nestia's ability to properly type the response type.

Workaround's we need to use today:

  1. Use async / await and only work with Promises
  2. Use the firstValueFrom rxjs operator to convert Observable to Promise before returning the response from the controller.

This works fine:

   @TypedRoute.Get('user/:id')
   async getUser(@Param('id') id: string): Promise<User> {
     return firstValueFrom(this.userService.findById(id));
   }

This does not:

   @TypedRoute.Get('user/:id')
   getUser(@Param('id') id: string): Observable<User> {
     return this.userService.findById(id);
   }

Fixes #747.


💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.

Copilot avatar Aug 08 '25 16:08 Copilot