当返回类型为Promise of something时,使用reflect-metadata获取返回类型

时间:2019-02-07 02:56:15

标签: typescript reflect-metadata

当函数返回类型为Promise<number>时,如何通过反射得到它?

如果我愿意

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

它只返回Promise,所以我们不知道这是数字的承诺吗?

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

2 个答案:

答案 0 :(得分:0)

似乎在不久的将来将不支持此功能。

#14971 (comment)中所述,反射和运行时类型序列化暂时不在TypeScript项目的范围之内。

Mohamed Hegazylink

答案 1 :(得分:-1)

尝试使用自定义方法装饰器?

/* 重要说明

  • 装饰器中传递的所有类型都必须是类
  • 不支持接口和枚举 */

(打字稿)

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)
}