【问题标题】:Get return type with reflect-metadata , when return type is Promise of something当返回类型为 Promise of something 时,使用 reflect-metadata 获取返回类型
【发布时间】:2019-07-01 02:45:57
【问题描述】:

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

如果我只是这样做

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

它只是返回Promise,所以有办法知道它是数字的承诺吗?

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

【问题讨论】:

  • 我也有同样的问题。 :-/

标签: typescript reflect-metadata


【解决方案1】:

这个功能好像近期不支持了。

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

——Mohamed Hegazy (link)

【讨论】:

    【解决方案2】:

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

    /* 重要说明

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

    (打字稿)

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

    【讨论】:

      猜你喜欢
      • 2021-10-17
      • 2016-12-08
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 2012-10-03
      • 2021-11-25
      • 2017-06-07
      • 1970-01-01
      相关资源
      最近更新 更多