typescript - 为什么反射元数据仅在使用装饰器时才起作用?

标签 typescript reflect-metadata

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

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

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

最佳答案

PR实现此功能的说明:

emit design-time type metadata for decorated declarations in source.



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

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

关于typescript - 为什么反射元数据仅在使用装饰器时才起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48547005/

相关文章:

typescript - 为什么在vite中不能使用reflect-metadata

typescript - 如何从单个 typescript 文件仅生成 .d.ts?

javascript - 将 ng2-charts 添加到 Typescript/Angular 2 项目引用路径和 .js 文件的路径不正确

typescript - 在 TypeScript 中提示抽象类

node.js - 从一个接口(interface)映射到另一个接口(interface)

javascript - typescript 装饰器只能在同一个方法中工作

node.js - Typescript 属性装饰器可以修改实例成员而不是整个类吗?

javascript - 如何使用 WebStorm 在 TypeScript 而不是 JavaScript 中创建 Cucumber 步骤定义文件?

javascript - 尝试配置新的 webpack + angular2 项目时出现错误 TS2384 : Overload signatures must all be ambient or non-ambient

typescript - @Reflect.metadata 生成错误 TS1238 : Unable to resolve signature of class decorator when called as an expression