angular - Typescript:fel TS2377: Konstruktörer för härledda klasser måste innehålla ett 'super'-anrop


Jag försöker implementera detta Stackblitz-exempel på angular-upload-file-with-progress-bar men i min kod

export class UploadDocumentTemplateComponent extends FieldType {}

Jag har den här raden på grund av det får jag det här felet

fel TS2377: Konstruktorer för härledda klasser måste innehålla ett 'super'-anrop.

hur löser man detta problem?

Svar #1

För att ge ett lite mer komplett svar eller en förklaring till varför du gör svaret ovan, är ordet super en referens till superklassen eller föräldraklassen till UploadDocumentTemplateComponent som är FieldType.

Du visar inte här om du kallade konstruktorn för barnklassen, men när du gör det är det nödvändigt att också kalla på förälderns konstruktormetod.

Och du gör det så här:

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

Igen för mer fullständighets skull. Även när du skickar in super(); kan du fortfarande se ett fel, särskilt om du har följande:

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

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

Vid vilken punkt du löser det på det sättet:

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

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

Men chansen är att du inte vill göra det, chansen är att vi vill att color fortfarande ska komma in som ett argument till din UploadDocumentTemplateComponent när du skapar den.

Så kanske vi kan ta in ett argument till UploadDocumentTemplateComponent-konstruktörfunktionen på följande sätt:

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

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

Nu är en annan detalj att uppmärksamma åtkomstmodifieraren, så notera i detta exempel att jag inte lade till en public-modifierare. Jag satte inte public-nyckelordet eftersom vi inte vill tilldela om eller skapa ett nytt fält i UploadDocumentTemplateComponent för color, fältet color tillhör FieldType i mitt exempel.

Det är därför jag inte lade till modifieraren public.

Nu kallar vi på basklassens konstruktor med superklassen här och vi kommer inte att skicka in den hårdkodade röda färgen, istället kan vi skicka in färgen på detta sätt:

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

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

Svar #2

bara i konstruktor behöver du

constructor()
{
   super()
}

Relaterade artiklar