javascript - Anropsmetod för arv utlöser Typescript-kompilatorfel


Jag har ett problem med WebStorm TypeScript-kompilatorn. Jag har följande klasser

export class rootData{
  id:string
  //...

  constructor(){
    //...
  }

  insert = ():Promise<any> =>{
    //...
  }
}

class child extends rootData {
  //...   

  constructor(){
     super();
  }

  insert = ():Promise<any> => {
        return super.insert();
    }
}

Så genom att skriva "super" ser jag alla rootData publika metoder i intellisense. Men efter att ha angett super.insert(), får jag följande fel:

TS2340: Endast publika och skyddade metoder i basklassen är åtkomliga via nyckelordet 'super'

Testade i TS-lekplatsen, det fungerar (förenklad version dock).

Tack för din hjälp.

REDIGERA: Efter att ha kontrollerat den kompilerade JavaScript-koden finns anropet till supermetoden där. Så kompilatorn ger ett fel men kompilerar...

Svar #1

Eftersom super-anrop omdirigeras till prototype kan du inte använda en property och behöver använda en method dvs. kan inte använda =()=>.

Fixad kod:

export class rootData{
  id:string
  //...

  constructor(){
    //...
  }

  insert():Promise<any>{
    //...
  }
}

class child extends rootData {
  //...   

  constructor(){
     super();
  }

  insert():Promise<any> {
        return super.insert();
    }
}

Relaterade artiklar