我正在阅读这篇文章,它@Injectable
有@Inject
以下内容:
问题解决了。事实上,这正是@Inject 在不使用 TypeScript 进行编译时的用途。如果我们现在看一下转译的代码,我们会看到所有需要的元数据都已生成(是的,简化了)。
...
我们基本上可以将任何装饰器放在我们的代码中,只要它附加到类声明或构造函数参数即可。换句话说,我们可以再次删除 @Inject 并使用我们放在类上的其他东西,因为这将导致 TypeScript 也为构造函数参数发出元数据......幸运的是,Angular 附带了另一个我们可以使用的装饰器。@Injectable 通常用于 Dart 元数据生成。它在 TypeScript 领域没有任何特殊含义,但事实证明它非常适合我们的用例。
那么,我的理解是否正确,即:
- 如果一个类被用作其他类的可注入但不依赖于任何其他类,则在构造函数中既不需要@Injectable 也不需要@Inject
- 如果一个类依赖于任何其他类并且没有使用任何装饰器,则它需要
@Injectable()
装饰器 - 如果 TS 和 一起使用
emitDecoratorMetadata:true
,@Inject
装饰器是没有用的 - 如果不使用 TS 或与 TS 一起使用
emitDecoratorMetadata:false
,@Inject
是指定依赖关系的唯一机制