Angular:在构造函数中声明并分配 属性 依赖项

Angular: Declare and assign property of a dependency inside constructor

这是我在开发中多次遇到的案例

假设我有一个具有服务依赖性的组件,该组件具有我需要的一些可观察属性。

可以像这样声明和分配它们:

files$: Observable<...>;
fileTypes$: Observable<...>;

constructor(fileService: FileService) {
  this.files$ = fileService.files$;
  this.fileTypes$ = fileService.fileTypes$;
}

但是在有很多属性的情况下,或者 Observable 的类型(在本例中为 ...)很长的情况下,这可能会无缘无故地变得臃肿。

我尝试了以下解决方案,它会给我自动类型推断:

constructor(fileService: FileService,
  public files$ = fileService.files$,
  public fileTypes$ = fileService.fileTypes$
) {}

然而,当 运行 时,出现以下错误:

"Can't resolve all parameters for FilemanagerComponent: ([object Object], ?, ?)."

在参数中添加 @Optional() 没有帮助。

另一个解决方案是简单地将服务声明为 public,然后在模板中使用它的 属性,但我不太喜欢这个解决方案,因为它从类型安全。

有什么干净的方法可以做到这一点吗?

您可以简单地使用

files$ = this.fileService.files$;
fileTypes$ = this.fileService.fileTypes$;

constructor(private fileService: FileService) {}

但是你的第一个解决方案绝对没问题。好的 IDE 会使用一个键盘快捷键为您添加属性声明。在组件中声明类型(而不是仅在服务中声明)使代码更易于阅读和理解,恕我直言。