typescript - Få returtyp med reflect-metadata, när returtypen är Promise av något


När funktions returtyp är Promise<number>, hur kan jag få den med reflektion?

Om jag bara gör

Reflect.getMetadata("design:returntype", target, key)

det returnerar bara Promise, så finns det ett sätt att veta att det är en Promise av nummer?

name:"Promise"
prototype:Promise {constructor: , then: , catch: , …}
reject:function reject() { … }
resolve:function resolve() { … }

Svar #1

Det verkar som att den här funktionen inte kommer att stödjas inom den närmaste framtiden.

Som noterats i #14971 (kommentar), ligger reflektion och körningstidstyp-serialisering utanför TypeScript-projektets omfattning för tillfället.

— Mohamed Hegazy (länk)

Svar #2

Försök att använda Anpassad Metoddekorerare?

Viktiga anteckningar

  • alla typer som skickas in i dekoratorn måste vara klass
  • interface och enum stöds inte

(TypeScript)

export function ReturnType(type: any): MethodDecorator {
  return (target, propertyKey) => {
    Reflect.defineMetaData('YOUR_CUSTOM_KEY', type, target, propertyKey);
  }
}

// Somewhere in your code

@ReturnType(Number)
async function myFunc():Promise<number> {
  return await Promise.resolve(1234)
}

Relaterade artiklar