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

时间:2018-03-27 18:27:50

标签: javascript angular typescript

我正在学习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);
     }

}

任何有关为何会发生这种情况的解释的任何帮助都将非常感激。

2 个答案:

答案 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,以便在应用程序中具有相同的版本。