class A { constructor(public x: string) { } } class B extends A { constructor(x: string, public data: string) { super(x); } } class C extends A { constructor(x: string) { super(x); } } var r1: typeof A = B; // error var r2: new (x: string) => A = B; // error var r3: typeof A = C; // ok