【问题标题】:@Reflect.metadata generates error TS1238: Unable to resolve signature of class decorator when called as an expression@Reflect.metadata 生成错误 TS1238:作为表达式调用时无法解析类装饰器的签名
【发布时间】:2016-04-02 16:51:17
【问题描述】:

我尝试将 @Reflect.metadata 装饰器应用于 TypeScript 类,遵循 reflect-metadata.d.ts 的第 82-84 行的示例:

/// <reference path="node_modules/reflect-metadata/reflect-metadata.d.ts"/>

@Reflect.metadata('key', 0)
class C {
}

但是,TypeScript 1.7.2 编译器在@Reflect.metadata 行生成以下错误:

错误 TS1238:当作为表达式调用时,无法解析类装饰器的签名。
无法调用类型缺少调用签名的表达式。

怎么了?

【问题讨论】:

    标签: typescript typescript1.7 reflect-metadata


    【解决方案1】:

    来自 TypeScript docs

    装饰器被检查为调用表达式

    从 1.6 开始,装饰器类型检查更加准确; 编译器会将装饰器表达式检查为调用表达式,并将装饰实体作为参数。这可能会导致报告以前版本中没有的错误。

    我的猜测是您可能需要使用较新版本的 TypeScript 或较旧版本的 reflect-metadata

    最新版本是:

    • typescript@2.3.2
    • reflect-metadata@0.1.10

    【讨论】:

      【解决方案2】:

      解决方案是将装饰器函数的所有参数标记为可选:

      function logType(a?: any, b?: any) {
          console.log(a, b);
      }
      
      @logType
      class MyClass {...}
      

      然后根据您的需要进行调整。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-18
        • 2018-12-03
        • 2020-01-30
        • 2016-07-26
        • 2021-07-06
        • 1970-01-01
        • 2016-10-08
        • 2020-09-07
        相关资源
        最近更新 更多