Búsqueda de sitios web

javascript - La llamada al método de herencia provoca un error del compilador de Typescript


Tengo un problema con el compilador de TypeScript de WebStorm. Tengo las siguientes clases

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

  constructor(){
    //...
  }

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

class child extends rootData {
  //...   

  constructor(){
     super();
  }

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

Entonces, al escribir "super", veo todos los métodos públicos de rootData en el intellisense. Pero después de establecer super.insert(), obtengo el siguiente error:

TS2340: Solo los métodos públicos y protegidos de la clase base son accesibles mediante la palabra clave 'super'

Probado en el playground de TS, está funcionando (aunque era una versión simplificada).

Gracias por tu ayuda.

EDITAR: Después de revisar el javascript compilado, la llamada al método super está ahí. Así que el compilador da un error pero compila...

Respuesta #1

Debido a que las llamadas a super se redirigen al prototype, no se puede usar una propiedad y se necesita usar un método, es decir, no se puede usar =()=>.

Código corregido:

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

  constructor(){
    //...
  }

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

class child extends rootData {
  //...   

  constructor(){
     super();
  }

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

Artículos relacionados