Typen haben separate Deklarationen einer privaten Eigenschaft

Lesezeit: 2 Minuten

Benutzer-Avatar
Mike Ich

Ich lerne Angular (das in TypeScript geschrieben ist) und bin auf diesen Fehler gestoßen:

Die Klasse „SnackbarService“ erweitert die Basisklasse „MatSnackBar“ fälschlicherweise. Typen haben separate Deklarationen einer privaten Eigenschaft ‘_overlay’.

beim Versuch zu verlängern MatSnackBar aus @angular/material.

Das ist mein Code:

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, ...);
    }
  }
}

Jede Hilfe mit irgendeiner Art von Erklärung, warum dies passiert, wäre wirklich dankbar.

  • Es ist irgendwie seltsam, dass ein Dienst eine Komponente erweitert!? Obwohl es hier nicht direkt um Ihre Frage geht, hat es ein Stirnrunzeln meiner Augenbraue(n) hervorgerufen 😦

    – Bernoulli IT

    15. Mai 2020 um 13:54 Uhr

Benutzer-Avatar
Suren Srapjan

Dies geschieht, weil durch Deklarieren des Konstruktors als Übernahme von a private _overlay Parameter haben Sie Ihren eigenen erstellt _overlayaber das ist bereits in der Basisklasse definiert MatSnackBar.

Entferne das private Teil der Deklaration und erben sie von der Basisklasse. Machen Sie dasselbe für die anderen Konstruktorparameter.

export class SnackbarService extends MatSnackBar{

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

Sie können sie weiterhin über abrufen this.

  • In einigen Fällen kann es sich um eine doppelte Eigenschaft handeln, die in beiden Klassen definiert ist

    – FindOutIslamNow

    21. März 2019 um 12:15 Uhr

  • In der abstrakten Basisklasse kann der Konstruktorparameter weiterhin als deklariert werden private readonlyaber der abgeleitete Typ muss keine Zugriffsmodifizierer haben.

    – Krillgar

    29. Mai 2019 um 11:43 Uhr

  • offensichtlicher Punkt zu machen, aber nirgendwo oben angegeben – wenn Sie das injizierte Mitglied in der abgeleiteten Klasse verwenden möchten, darf der Konstruktorparameter in der Basisklasse nicht als privat deklariert werden, sondern normalerweise geschützt werden.

    – jjee

    1. Januar 2020 um 15:51 Uhr


  • In meinem Fall musste ich die Eigenschaft ändern protected in der Parent-Komponente, um in der Child-Komponente über darauf zugreifen zu können this

    – Alexandre Justino

    18. Februar 2021 um 15:43 Uhr

Benutzer-Avatar
Anurag Vohra

Dies geschieht auch in Fällen, in denen Abhängigkeiten Versionsfehler aufweisen. [From typescript perspective]

Zum Beispiel, wenn Ihre App EIN verwendet Version 1.0 eines Pakets Bund Version 1.0 des Pakets C. Paket C verwendet jedoch eine andere Version von Paket Bsagen wir 2,0.

Jetzt haben Sie im gesamten Build-Prozess zwei verschiedene Klassen mit demselben Namen. Um dies zu beheben, müssen Sie Paket C oder Paket B aktualisieren, um die gleiche Version in der gesamten App zu haben.

  • Das war mein Problem.

    – petersch

    15. Juni 2021 um 2:51 Uhr

  • Sehr viel dies. Die Abhängigkeitstypisierungen bei mir waren alle genau identisch und bekamen dies immer noch aufgrund eines Versionskonflikts.

    – kdyz

    29. September 2021 um 8:10 Uhr

1225800cookie-checkTypen haben separate Deklarationen einer privaten Eigenschaft

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy