在这个plunker 中,我试图用自定义注释装饰 MyModel 上的属性。使用自定义装饰器取消注释属性或取消注释import 'reflect-metadata';
并且使用内联装饰器生成的属性:
Error: Cannot resolve all parameters for 'Parser'(?). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'Parser' is decorated with Injectable. at NoAnnotationError.ZoneAwareError
我可以只取消注释内联装饰器,但在编辑器中,import 'reflect-metadata';
您不会收到关于 metadata() 不是 Reflect 属性的代码自动完成和 tsc 错误。
以角度使用反射 API 的正确方法是什么?
编辑:
使用一个新的@angular/cli 生成的应用程序import 'core-js/es7/reflect';
,但如果你尝试任何 Reflect.metadata() 组合,pollyfills.ts
你仍然会得到Property 'metadata' does not exist on type 'typeof Reflect'.
Edit2:我似乎通过替换import 'core-js/es7/reflect';
为import 'reflect-metadata';
in来在 angular cli 中工作,pollyfills.ts
但我不知道它们是否是一对一的替代品,或者是否有后果。我不清楚这里的答案。Angular2 使用 npm reflect-metadata 或 core-js/es7/reflect