What is the Typescript type of a constructor function?
Here is an example of what I mean which throws this warning:
TS2507: Type 'Function' is not a constructor function type.
What type do I need to define clazz as here ?
class A {
foo() {console.log("bar")};
}
console.log(typeof A);
// function
function Factory(clazz: Function) : any {
class B extends clazz {
// Type 'Function' is not a constructor function type.
}
return B;
}
class Foo extends Factory(A) {}
new Foo().foo();
If I suppress the TS warning this code will execute and print out the expected result of bar
We will use a construct signature:
type Constructable = { new (...args: any[]): any; };
function Factory(clazz: Constructable): Constructable {
class B extends clazz {
}
return B;
}
But this is not very good as a return type. Ideally it should at least return the class that was passed in:
function Factory<T extends Constructable>(clazz: T): T {
class B extends clazz {
}
return B;
}
Going further, we could also annotate the return type as T & { ... } to match the class that is returned, too.
Playground
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With