【问题标题】:Why is reflect-metadata only working when using a decorator?为什么反射元数据仅在使用装饰器时才有效?
【发布时间】:2018-07-10 20:22:13
【问题描述】:

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

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

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

【问题讨论】:

  • 那么它实际上什么都不做;-)

标签: typescript reflect-metadata


【解决方案1】:

实现此功能的PR 声明:

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

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

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

【讨论】:

  • 奇怪的解决方案。
  • 您先生是救生员。谢谢。
  • 天哪。知道为什么必须装饰吗?这对我来说毫无意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 2015-09-03
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
相关资源
最近更新 更多