类型具有私有属性的单独声明

2022-08-30 05:33:40

我正在学习Angular(它是用TypeScript编写的),我偶然发现了这个错误:

类'SnackbarService'错误地扩展了基类'MatSnackBar'。类型具有私有属性“_overlay”的单独声明。

尝试从 扩展时。MatSnackBar@angular/material

这是我的代码:

import { MatSnackBar } from '@angular/material';
import { Overlay } from '@angular/cdk/overlay';
import { LiveAnnouncer } from '@angular/cdk/a11y';
...

export class SnackbarService extends MatSnackBar {

  constructor(
    private _overlay: Overlay, 
    private _liveAnnouncer: LiveAnnouncer,
    ...
  ) {
    super(_overlay, _liveAnnouncer, ...);
    }
  }
}

任何关于为什么会发生这种情况的解释的帮助将不胜感激。


答案 1

发生这种情况是因为通过将构造函数声明为采用参数,您已经创建了自己的 ,但该参数已在基类中定义。private _overlay_overlayMatSnackBar

从声明中删除部件,并从基类继承它。对其他构造函数参数执行相同的操作。private

export class SnackbarService extends MatSnackBar{

  constructor(
    _overlay: Overlay, 
    _liveAnnouncer: LiveAnnouncer,
    ...
  ) {
     super(_overlay, _liveAnnouncer, ...);
    }
  }
}

您仍然可以通过以下方式访问它们this.


答案 2

这也发生在依赖版本错误的情况下。[从打字机的角度来看]

例如,如果你的应用 A 使用包 B 的 1.0 版和包 C 的 1.0 版。但是,包 C 使用不同版本的包 B,例如 2.0。

现在,在整个构建过程中,您有两个同名的不同类。要解决此问题,您必须升级包C或升级包B,以便在应用程序中具有相同的版本。