问题标签 [reflect-metadata]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
angular - Angular4 core.es5.js 使用类装饰器时需要未捕获的反射元数据填充程序
将我现有的项目升级到 Angular 4 和 Angular/CLI 1.0 后,我收到此错误:
我将我的项目与一个新项目进行了比较ng new
,它们在配置上看起来很相似。我已经重新启动了我的终端和计算机。已删除node_modules
,,,,npm cache clean
_npm prune
npm i
我在 Windows 7 上运行
版本 1.0.0 上的 CLI 构建没有错误,ng build
但是当我运行应用程序时,我在浏览器中收到错误。在https://angular-update-guide.firebaseapp.com/的帮助下,我正在从版本 rc.2 升级 CLI,从 v2.5 升级 Angular
* 更新
我发现我index.scala.html
没有它的脚本标签polyfills.js
。连接那部分后,我产生了这个错误:
包.json
main.js
/tsconfig.json
/src/tsconfig.app.json
.angular-cli.json
polyfills.ts
typescript - 获取类的反射元数据修饰字段列表
我正在使用reflect-metadata
打字稿。我编写了自己的属性装饰器,它被称为Field
. 如何获取Field
任何类型的由 修饰的字段/属性列表。例如:我想从类 / 中获取带有元数据的字段,ProductID
如下所示/。ProductName
Product
typescript - 什么是打字稿中的反射元数据
什么是反射元数据及其用途?
使用反射元数据的语法和目的是什么?
有人可以提供示例以更好地理解相同的内容吗?
反射元数据如何有助于在打字稿中实现装饰器。
angular - 装饰器何时以及如何应用到 @angular 包中的装饰类
如果我在我的类中使用装饰器,则在导入类时会对装饰器进行评估。这是一个小例子:
转译为:
但是,当在@angular
包中应用模块或任何其他装饰器时,输出如下:
如您所见,这里没有应用装饰器。它们只是保存在该decorators
属性中。为什么它与我的代码不同?
我问的原因是,在导入我的装饰类时,我希望它应用了装饰器,因此Reflect
可以使用:
但是,它不适用于@angular
包中的装饰类。
javascript - Typescript 装饰器只能在相同的方法中工作
我正在尝试在我的一个项目中使用 Typescript 装饰器,但我遇到了一种我无法理解的奇怪行为。
仅当装饰类位于尝试获取元数据的同一方法中时,它似乎才有效:
但是一旦我将它移到方法之外,它就不再起作用了:
两个测试都使用这个测试装饰器:
两者都打印到控制台...
此外,在两个转译的代码中,我可以看到属性被正确且完全相同地装饰:
这是我的tsconfig.json
. 我认为是正确的(es5
和emitDecoratorMetadata
)experimentalDecorators
:
我错过了什么?
node.js - 如何从方法装饰器访问类元数据
我有两个装饰器。一个类装饰器和一个方法装饰器。类装饰器定义了我想在方法装饰器中访问的元数据。
类装饰器:
方法装饰器:
这是我的类定义:
问题:
MethodDecorator 的以下行返回metaData is: undefined
. 为什么它是未定义的?
问题:
如何从 MethodDecorator 访问 ClassDecorator 定义的元数据?
typescript - Reflect.getMetadata 和 Reflect.getOwnMetadata 有什么区别?
正如标题中所说:reflect-metadata
API 提供了一个getMetadata
方法和一个getOwnMetadata
- 这里有什么区别?hasOwnMetadata
等也一样。
typescript - 为什么反射元数据仅在使用装饰器时才有效?
没有装饰器,元数据就会丢失——但为什么呢?
这会返回[Function: Bar]
,这很好。但是如果没有@Baz
装饰器(实际上什么都不做),它会返回undefined
. 为什么?
c# - 像在 C# 中一样在 TypeScript 中为反射元数据一次传递对象和属性
在 C# 中,我们使用 DataAnnotation 在属性上添加元属性。我需要 TypeScript 中的此功能用于 ldap 模型类。装饰者应该设置 LDAP 目录内部使用的 LDAP 属性
但是要获取ldapAttribute
装饰器值,我需要将对象和属性名称作为原始字符串传递,如下所示:
它可以工作,但这似乎是不好的做法,因为当sureName
属性被重命名LdapUser
而不将其应用于Reflect.getMetadata()
调用时,它会导致运行时而不是编译器错误。而且智能感知也缺失了。所以我正在寻找这样的解决方案:
这里的问题是我需要某种反射来划分user.SureName
属性名称(这里sureName
)和类对象(这里user
)。我已经在 C# 中使用反射做过类似的事情,但不知道如何在 TS 中做到这一点。
解决方法
它不如在 C# 中使用反射那么好,但比只使用纯字符串要好:
用法
可悲的是,我们这里没有智能感知。但是如果属性名称不存在,至少我们会得到一个编译器错误。