I've been playing a bit with interfaces with construct signatures in TypeScript, and I became a bit confused when the following failed to type check:
class Foo {
constructor () {
}
}
interface Bar {
new(): Bar;
}
function Baz(C : Bar) {
return new C()
}
var o = Baz(Foo);
The type error is:
Supplied parameters do not match any signature of call target: Construct signatures of types 'new() => Foo' and 'Bar' are incompatible: Type 'Bar' requires a construct signature, but Type 'Foo' lacks one (C: Bar) => Bar
The type of Foo's constructor is () => Foo, and that is what I thought that Bar said. Am I missing something here?