==== tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassParameterProperties.ts (4 errors) ==== // ordering of super calls in derived constructors matters depending on other class contents class Base { x: string; } class Derived extends Base { constructor(y: string) { var a = 1; super(); // ok } } class Derived2 extends Base { constructor(public y: string) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ var a = 1; ~~~~~~~~~~~~~~~~~~ super(); // error ~~~~~~~~~~~~~~~~~~~~~~~~~ } ~~~~~ !!! A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties. } class Derived3 extends Base { constructor(public y: string) { super(); // ok var a = 1; } } class Derived4 extends Base { a = 1; constructor(y: string) { ~~~~~~~~~~~~~~~~~~~~~~~~ var b = 2; ~~~~~~~~~~~~~~~~~~ super(); // error ~~~~~~~~~~~~~~~~~~~~~~~~~ } ~~~~~ !!! A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties. } class Derived5 extends Base { a = 1; constructor(y: string) { super(); // ok var b = 2; } } class Derived6 extends Base { a: number; constructor(y: string) { this.a = 1; var b = 2; super(); // ok } } class Derived7 extends Base { a = 1; b: number; constructor(y: string) { ~~~~~~~~~~~~~~~~~~~~~~~~ this.a = 3; ~~~~~~~~~~~~~~~~~~~ this.b = 3; ~~~~~~~~~~~~~~~~~~~ super(); // error ~~~~~~~~~~~~~~~~~~~~~~~~~ } ~~~~~ !!! A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties. } class Derived8 extends Base { a = 1; b: number; constructor(y: string) { super(); // ok this.a = 3; this.b = 3; } } // generic cases of Derived7 and Derived8 class Base2 { x: T; } class Derived9 extends Base2 { a = 1; b: number; constructor(y: string) { ~~~~~~~~~~~~~~~~~~~~~~~~ this.a = 3; ~~~~~~~~~~~~~~~~~~~ this.b = 3; ~~~~~~~~~~~~~~~~~~~ super(); // error ~~~~~~~~~~~~~~~~~~~~~~~~~ } ~~~~~ !!! A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties. } class Derived10 extends Base2 { a = 1; b: number; constructor(y: string) { super(); // ok this.a = 3; this.b = 3; } }