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}`);
  }
}
Answer from mollwe on Stack Overflow
🌐
DEV Community
dev.to › tak089 › understanding-this-and-super-in-typescript-3hmg
Understanding This and Super in Typescript - DEV Community
March 13, 2025 - In Typescript, this and super are keywords used in object-oriented programming to refer to the current instance of a class and the base class, respectively.
🌐
C# Corner
c-sharpcorner.com › UploadFile › 5089e0 › how-to-use-super-keyword-in-typescript
How to Use Super Keyword In TypeScript
October 4, 2019 - The super keyword can be used in expressions to reference base class properties and the base class constructor. Super calls consist of the keyword super followed by an argument list enclosed in parentheses.
🌐
SPGuides
spguides.com › super-keyword-in-typescript
super Keyword in Typescript
October 14, 2024 - In TypeScript, the super keyword is used within a subclass to access the parent class’s methods and constructors. It enables subclasses to inherit and extend the functionalities of their parent classes.
🌐
O'Reilly
oreilly.com › library › view › mastering-typescript-3 › 9781789536706 › 38bfedc0-a0ec-429f-9f1c-319202d62a22.xhtml
The super keyword - Mastering TypeScript 3 - Third Edition [Book]
In other words, the constructor of a derived class overrides, or supersedes, the constructor of the base class. TypeScript includes the super keyword to enable calling a base class's function with the same name.
🌐
MDN Web Docs
developer.mozilla.org › en-US › docs › Web › JavaScript › Reference › Operators › super
super - JavaScript | MDN
The super keyword is used to access properties on an object literal or class's [[Prototype]], or invoke a superclass's constructor.
🌐
TypeScript
typescriptlang.org › docs › handbook › classes.html
TypeScript: Handbook - Classes
Again, we see the extends keywords used to create two new subclasses of Animal: Horse and Snake. One difference from the prior example is that each derived class that contains a constructor function must call super() which will execute the constructor of the base class. What’s more, before we ever access a property on this in a constructor body, we have to call super(). This is an important rule that TypeScript ...
🌐
TypeScript
typescriptlang.org › docs › handbook › 2 › classes.html
TypeScript: Documentation - Classes
Base method definitions can still be called via super. In classes, a special type called this refers dynamically to the type of the current class. Let’s see how this is useful: ... Here, TypeScript inferred the return type of set to be this, rather than Box.
Find elsewhere
🌐
DEV Community
dev.to › ahmad_tibibi › ts1034-super-must-be-followed-by-an-argument-list-or-member-access-495o
TS1034: 'super' must be followed by an argument list or member access - DEV Community
January 7, 2025 - In TypeScript (and JavaScript), the super keyword is used in derived classes to access and call functions on an object's parent class.
🌐
YouTube
youtube.com › watch
Super keyword typescript | Super keyword in classes of typescript | Super function typescript - YouTube
In TypeScript, the super keyword is used to call methods and constructors from a parent class (superclass) within a derived class (subclass). It allows you t...
Published   August 11, 2023
🌐
YouTube
youtube.com › watch
How to use Super in Typescript? - YouTube
In this video we will learn how to use "Super" in typescript and usage of it.
Published   May 27, 2020
🌐
SonarSource
rules.sonarsource.com › typescript › rspec-3854
TypeScript static code analysis: "super()" should be ...
Unique rules to find Bugs, Vulnerabilities, Security Hotspots, and Code Smells in your TYPESCRIPT code
🌐
YouTube
youtube.com › watch
DevTips Daily: The TypeScript super function / keyword - YouTube
⭐️ Check out more DevTips Daily ⭐️ ↳ https://www.youtube.com/watch?v=8LqK_6s-3U0&list=PLpc_YvcwbxaQooG5z-N28XVQ32z_6ImdwGot a suggestion for a DevTip? Let me...
Published   October 23, 2021
🌐
Krython
krython.com › tutorial › typescript › super-keyword-calling-parent-class-members
📞 Super Keyword: Calling Parent Class Members - Tutorial | Krython
By the end of this tutorial, you’ll be a super expert at using super! Let’s dive in! 🏊‍♂️ · The super keyword is like a telephone 📞 that lets you call your parent class directly.
🌐
Xjavascript
xjavascript.com › blog › typescript-super
Mastering `super` in TypeScript | XJavaScript.com
June 16, 2025 - The super keyword in TypeScript is a powerful tool when working with class - based inheritance. It allows you to call the parent constructor and methods, which is essential for proper initialization and extending functionality.
🌐
W3Schools
w3schools.com › jsref › jsref_class_super.asp
JavaScript Class super keyword
Create a class named "Model" which will inherit the methods from the "Car" class, by using the extends keyword. By calling the super() method in the constructor method, we call the parent's constructor method and gets access to the parent's properties and methods:
🌐
GitHub
github.com › microsoft › TypeScript › issues › 54900
`super` keyword allows calling arrow functions defined on the super class, but shouldn't · Issue #54900 · microsoft/TypeScript
May 2, 2023 - How I got here: I am trying to get contravariant type checking on subclass overrides of abstract super class functions, and as discussed in several places (below are some examples), you can only achieve this with superclass abstract instance properties that are functions (and not with abstract class methods): ... But I would also like to let these subclasses sometimes call a superclass's default implementation (i.e.
Published   Jul 06, 2023
🌐
Tutorial Teacher
tutorialsteacher.com › typescript › typescript-class
TypeScript Classes
The constructor of the Employee class initializes its own members as well as the parent class's properties using a special keyword 'super'. The super keyword is used to call the parent constructor and passes the property values.
Top answer
1 of 3
10

Another solution I eventually came up with, in addition to the ones provided by @iberbeu and @Nypan, is to add and intermediary initProps() method right before the call to scream():

class Person 
{
    public firstName: string;

    constructor(firstName: string, props?: any)
    {
        this.firstName = firstName;
        this.initProps(props);
        this.scream();
    }

    protected initProps(props: any): void
    {
    }

    protected scream(): void
    {
        console.log(this.firstName);
    }
}

class Employee extends Person
{
    public lastName: string;

    constructor(firstName: string, lastName: string)
    {
        super(firstName, {lastName});
    }

    protected initProps(props: any): void
    {
        this.lastName = props.lastName;
    }

    protected scream(): void
    {
        console.log(this.firstName + ' ' + this.lastName);
    }
}

Although I think both made a strong point and I should actually be using a factory pattern instead..

2 of 3
6

Am I doing a dumb thing here?

Yes you are. As iberbeu said in his comment a constructor should never do anything that does not have to do with constructing the object. It is a case of bad practice that can lead to all sorts of unexpected behaviour.

Are there better ways to arrange my code so I don't need to do this?

Using the solution you provided in your C option is the way to go here.

Is there some way to work around this error?

It depends on what you actually want to do. The normal way of doing things is illustrated by yourself in your C option. If the problem you are having is related to actually instantiating complex objects you might want to look in to builder/factory patterns. But if you actually want the constructors to do something you are simply doing it wrong; constructors are not ment to perform actions, they are there to construct objects and nothing else.

🌐
Webdevtutor
webdevtutor.net › blog › typescript-supersuper
Mastering TypeScript's Super Keyword: Understanding super.super and More
In TypeScript, the super keyword refers to the parent class or interface of the current class. When used with a method name, it allows you to call that method on the parent class.