user12139262
user12139262

Reputation:

Typescript: Access static members of a class without instantiating it from an array of Constructor signatures

I have the following code:

class Parent {
   public static message: string;
}

class FirstChild extends Parent {
   public static message: string = "Hello from first child";
}

class SecondChild extends Parent {
   public static message: string = "Hello from second child";
}

const children: (new() => Parent) = [FirstChild, SecondChild];
console.log(children[0].message); // tsc error: property does not exist

I get this error:

property message does not exist on type new() => Parent

which makes sense, because the type is only referring to the constructor signature.

My question is: which type do I use to describe an array with constructor signatures of classes extending from a parent + the static attributes from this parent?

Upvotes: 1

Views: 408

Answers (1)

Alex Wayne
Alex Wayne

Reputation: 187004

Anytime you want to reference a class object, and not an instance, you want to use:

typeof MyClass

That means that you want an array of typeof Parent instead:

const children: (typeof Parent)[] = [FirstChild, SecondChild];
console.log(children[0].message); // string

Playground

Upvotes: 0

Related Questions