Using TypeScript super()

60,473

The super call must supply all parameters for base class. The constructor is not inherited. Commented out artist because I guess it is not needed when doing like this.

class StreetArtist extends Artist {
  constructor(
    name: string,
    age: number,
    style: string,
    location: string,
    public medium: string,
    public famous: boolean,
    public arrested: boolean,
    /*public art: Artist*/
  ){
    super(name, age, style, location);
    console.log(`instantiated ${this.name}. Are they famous? ${famous}. Are they locked up? ${arrested}`);
  }
}

Or if you intended the art parameter to populate base properties, but in that case I guess there isn't really a need for using public on art parameter as the properties would be inherited and it would only store duplicate data.

class StreetArtist extends Artist {
  constructor(
    public medium: string,
    public famous: boolean,
    public arrested: boolean,
    /*public */art: Artist
  ){
    super(art.name, art.age, art.style, art.location);
    console.log(`instantiated ${this.name}. Are they famous? ${famous}. Are they locked up? ${arrested}`);
  }
}
Share:
60,473
alex bennett
Author by

alex bennett

I like javascript, arts and crafts, and data visualization.

Updated on June 22, 2020

Comments

  • alex bennett
    alex bennett almost 4 years

    I am trying to extend a class in TypeScript. I keep receiving this error on compile: 'Supplied parameters do not match any signature of call target.' I have tried referencing the artist.name property in the super call as super(name) but is not working.

    Any ideas and explanations you may have will be greatly appreciated. Thanks - Alex.

    class Artist {
      constructor(
        public name: string,
        public age: number,
        public style: string,
        public location: string
      ){
        console.log(`instantiated ${name}, whom is ${age} old, from ${location}, and heavily regarded in the ${style} community`);
      }
    }
    
    class StreetArtist extends Artist {
      constructor(
        public medium: string,
        public famous: boolean,
        public arrested: boolean,
        public art: Artist
      ){
        super();
        console.log(`instantiated ${this.name}. Are they famous? ${famous}. Are they locked up? ${arrested}`);
      }
    }
    
    interface Human {
      name: string,
      age: number
    }
    
    function getArtist(artist: Human){
      console.log(artist.name)
    }
    
    let Banksy = new Artist(
      "Banksy",
       40,
      "Politcal Graffitti",
      "England / Wolrd"
    )
    
    getArtist(Banksy);