angular - Typescript:feil TS2377: Konstruktører for avledede klasser må inneholde et 'super'-kall


Jeg prøver å implementere dette Stackblitz-eksempelet på angular-upload-file-med-fremdriftslinje, men i koden min

export class UploadDocumentTemplateComponent extends FieldType {}

Jeg har denne linjen, på grunn av den får jeg denne feilen

feil TS2377: Konstruktører for avledede klasser må inneholde et 'super'-kall.

hvordan løse dette problemet?

Svar #1

For å gi et litt mer fullstendig svar eller en forklaring på hvorfor du gjør det ovennevnte, refererer ordet super til superklassen eller foreldresklassen til UploadDocumentTemplateComponent, som er FieldType.

Du viser ikke her om du har kalt konstruktøren til underklassen, men hver gang du gjør det, er det påkrevd å kalle konstruktørmetoden til forelderen også.

Og du gjør det slik:

export class UploadDocumentTemplateComponent extends FieldType {
  constructor() {
    super();
  }
}

Igjen, for å fullføre flere ganger. Selv når du skriver inn super();, kan du fortsatt se en feil, spesielt hvis du har følgende:

class FieldType {
  constructor(public color: string) {}
}

class UploadDocumentTemplateComponent extends FieldType {
  constructor() {
    super():
  }
}

På hvilket punkt du løser det slik:

class FieldType {
  constructor(public color: string) {}
}

class UploadDocumentTemplateComponent extends FieldType {
  constructor() {
    super('red'):
  }
}

Men sjansen er stor for at du ikke vil gjøre det, sjansen er stor for at vi vil at color fortsatt skal komme inn som et argument til din UploadDocumentTemplateComponent når du oppretter den.

Så kanskje vi kan ta inn et argument i UploadDocumentTemplateComponent-konstruktørfunksjonen på denne måten:

class FieldType {
  constructor(public color: string) {}
}

class UploadDocumentTemplateComponent extends FieldType {
  constructor(color: string) {
    super('red'):
  }
}

Nå er en annen detalj å være oppmerksom på tilgangsmodifikatoren, så legg merke til at i dette eksempelet la jeg ikke til en public-modifikator. Jeg satte ikke public-nøkkelordet fordi vi ikke ønsker å tilordne på nytt eller opprette et nytt felt i UploadDocumentTemplateComponent for color, feltet color tilhører FieldType i mitt eksempel.

Det er derfor jeg ikke satte på modifikatoren public.

Nå kaller vi foreldresklassens konstruktør med superklassen her, og vi kommer ikke til å sende inn den hardkodede røde, i stedet kan vi sende inn fargen slik:

class FieldType {
  constructor(public color: string) {}
}

class UploadDocumentTemplateComponent extends FieldType {
  constructor(color: string) {
    super(color):
  }
}

Svar #2

bare i konstruktøren trenger du

constructor()
{
   super()
}

Relaterte artikler