在angular应用程序中引用反射元数据或等效数据的正确方法

在angular应用程序中引用反射元数据或等效数据的正确方法,angular,reflection,reflect-metadata,Angular,Reflection,Reflect Metadata,在本文中,我试图用自定义注释装饰MyModel上的属性。使用自定义装饰器取消对属性的注释,或者取消对导入“反射元数据”的注释和具有内联装饰器的属性生成: 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 decorat

在本文中,我试图用自定义注释装饰MyModel上的属性。使用自定义装饰器取消对属性的注释,或者取消对导入“反射元数据”的注释
和具有内联装饰器的属性生成:

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”您不会得到关于元数据()不是反射属性的代码自动完成和tsc错误

在angular中使用reflect API的正确方法是什么

编辑:
使用新的@angular/cli genrated应用程序,您可以
导入'core js/es7/reflect'
位于
pollyfills.ts
中,但您仍然会得到
属性“metadata”在类型“typeof Reflect”上不存在。
如果您尝试Reflect.metadata()的任何组合

编辑2: 我似乎在angular cli中通过替换
import'core js/es7/reflect'实现了这一点使用
导入“反映元数据”在pollyfills.ts中,但我不知道它们是一对一的替代品,还是会产生影响。我不清楚这里的答案

我只是偶然发现了可能有用的方法。 我想你可能会对“第二个问题”部分感兴趣。我在尝试在angular应用程序中定义一些元数据时遇到了同样的问题,angular提供的反射似乎与window不同。因此,访问windows的reflect似乎为我解决了这个问题。我用过:

let reflect = window['Reflect'];
reflect.defineMetadata(metadataKey, metadataValue, target);
而不是

Reflect.defineMetadata(metadataKey, metadataValue, target);

我刚刚遇到了这个错误,到目前为止,我发现只有你犯了这个错误。我不需要为它导入任何东西,但tsc当然会抱怨
defineMetadata
Reflect
上不存在。我不知所措