woutervh- / typescript-is

MIT License
956 stars 35 forks source link

@AssertType throws synchronously in async methods #104

Open HitoriSensei opened 3 years ago

HitoriSensei commented 3 years ago

When using @AssertType decoator on async methods, calling the method throws synchronously instead of returning rejected promise.

example:

@ValidateClass()
export class MessageHandler {
  async handleMessage(@AssertType() body: { feedId: string }): Promise<void> {
    console.log(body);
  }
}

new MessageHandler()
  .handleMessage({ invalidMessage: 123 }) // error: throws synchronously here!
  .catch(e => {
    // …should be able to handle TypeGuardError here
  })

It would be perfect to make @AssertType aware of async keyword or Promise return type, but is it even possible?

HitoriSensei commented 3 years ago

I've done my research on decorators and metadata and prepared a PR addressing the issue: https://github.com/woutervh-/typescript-is/pull/105