6

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

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

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

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

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

怎么了?

4

2 回答 2

0

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

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

@logType
class MyClass {...}

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

于 2020-01-04T14:59:46.080 回答
0

来自 TypeScript文档

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

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

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

最新版本是:

  • typescript@2.3.2
  • reflect-metadata@0.1.10
于 2017-05-07T00:17:23.940 回答