Well, that was frivolous, I just had to get around the boundaries set by my own code.
The key indicates the constructor parameter as a new type that returns a generic type, which is the same generic type T returned by the getInstance function:
function getInstance<T>(constructor: { new (): T }): T { return new constructor(); }
This will give the correct results:
class Foo { public fooProp: string; } class Bar { public barProp: string; } var foo: Foo = getInstance(Foo);
source share