emitDecoratorMetadata及其在转换代码中的重要性

时间:2017-10-20 09:06:42

标签: angular typescript

我很好奇emitDecoratorMetadata选项在将TS转换为JS(在Angular 2上下文中)的重要性。如果设置为false,并且元数据不会包含在结果代码中,它会产生什么影响?

感谢。

2 个答案:

答案 0 :(得分:1)

如果要在运行时反映元数据,则需要装饰器元数据。

如果您不这样做,例如使用Reflect.metadata,则排除输出没有影响。默认情况下,emitDecoratorMetadata为false。装饰器仍然有效,但设计时间信息在运行时不可用。

答案 1 :(得分:1)

这是我遇到的一种阅读情况...

注入器使用打字稿编译器输出的元数据来确定组件正在请求的服务类型。元数据输出有关在方法上声明的参数的数量和类型的信息。

然后,依赖项注入系统可以查看构造函数参数元数据,以确定要注入的类型。

所有这些都是通过名为

的特殊打字稿编译器选项启用的
"emitDecoratorMetadata":true

通常在tsconfig.json文件中配置。

如果emitDecoratorMetadata未设置为true,则angular无法确定要在您的应用中注入什么。

如果使用角度CLI创建应用程序。默认情况下,此选项是打开的(设置为true)。

  

只有在以下情况下才会为服务或组件发出元数据:   类上有一个装饰器。哪个装饰器都没有关系。任何   装饰器将导致发出元数据。这就是为什么我们添加   服务的Injectable()装饰器,我们不必将其添加到   组件,因为它们已经具有组件装饰器

因此,注入系统确定要注入组件构造函数的类型。