@Reflect.metadata生成错误TS1238:当作为表达式调用时,无法解析类装饰器的签名

时间:2015-12-28 20:27:54

标签: typescript typescript1.7 reflect-metadata

我尝试将@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:当作为表达式调用时,无法解析类装饰器的签名   无法调用类型缺少调用签名的表达式。

怎么了?

2 个答案:

答案 0 :(得分:0)

来自TypeScript docs

  

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

     

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

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

最新版本是:

  • typescript@2.3.2
  • reflect-metadata@0.1.10

答案 1 :(得分:0)

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

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

@logType
class MyClass {...}

,然后根据需要进行调整。