我正在学习Angular,我偶然发现了这个错误:
类'SnackbarService'错误地扩展了基类'MatSnackBar'。 类型具有私有属性'_overlay'的单独声明。
尝试从@ angular / material扩展MatSnackBar时。
这是我的代码:
import { Injectable, Injector } from '@angular/core';
import { MatSnackBar } from '@angular/material';
import { Overlay } from '@angular/cdk/overlay';
import { LiveAnnouncer } from '@angular/cdk/a11y';
import { BreakpointObserver } from '@angular/cdk/layout';
@Injectable()
export class SnackbarService extends MatSnackBar{
constructor(
private _overlay: Overlay,
private _liveAnnouncer: LiveAnnouncer,
private _injector: Injector,
private _breakPointObserver: BreakpointObserver,
private _matSnackBar: MatSnackBar) {
super(_overlay, _liveAnnouncer, _injector, _breakPointObserver, _matSnackBar);
}
}
任何有关为何会发生这种情况的解释的任何帮助都将非常感激。
答案 0 :(得分:51)
因为您已经创建了自己的_overlay
,它已在基类MatSnackBar
中定义。从声明中删除private
部分并从基类继承它。为其他人做同样的事。
@Injectable()
export class SnackbarService extends MatSnackBar{
constructor(
_overlay: Overlay,
_liveAnnouncer: LiveAnnouncer,
_injector: Injector,
_breakPointObserver: BreakpointObserver,
_matSnackBar: MatSnackBar) {
super(_overlay, _liveAnnouncer, _injector, _breakPointObserver, _matSnackBar);
}
}
您仍然可以通过this.
答案 1 :(得分:10)
这也会发生在依赖版本不匹配的情况下。 [从打字稿的角度来看]
例如,如果您的应用 A 使用包 B 的 1.0 版和包C 的 1.0 版。但是包 C 使用包 B 的不同版本,比如 2.0。
现在您在整个构建过程中有两个具有相同名称的不同类。 要解决它,您必须升级包 C 或升级包 B,以便在应用程序中具有相同的版本。