4

没有装饰器,元数据就会丢失——但为什么呢?

const Baz = () : ClassDecorator => {
  return target => {}
}
class Bar {}
@Baz()
class Foo {
  constructor(bar: Bar) {}
}
console.log(Reflect.getMetadata('design:paramtypes', Foo));

这会返回[Function: Bar],这很好。但是如果没有@Baz装饰器(实际上什么都不做),它会返回undefined. 为什么?

4

1 回答 1

11

实现此功能的PR指出:

为源中的修饰声明发出设计时类型元数据。

因此,它明确设计为仅当类上有装饰器时才发出元数据。

我无法找到这个决定背后的理由,但我猜想为所有类(js 对大小敏感)发出这个代码会很浪费,并且装饰器和元数据被视为相关概念。

于 2018-01-31T17:42:09.760 回答