tests/cases/conformance/classes/propertyMemberDeclarations/assignParameterPropertyToPropertyDeclarationESNext.ts(2,16): error TS2729: Property 'bar' is used before its initialization. tests/cases/conformance/classes/propertyMemberDeclarations/assignParameterPropertyToPropertyDeclarationESNext.ts(3,16): error TS2729: Property 'foo' is used before its initialization. tests/cases/conformance/classes/propertyMemberDeclarations/assignParameterPropertyToPropertyDeclarationESNext.ts(6,19): error TS2729: Property 'm3' is used before its initialization. tests/cases/conformance/classes/propertyMemberDeclarations/assignParameterPropertyToPropertyDeclarationESNext.ts(12,17): error TS2729: Property 'baz' is used before its initialization. tests/cases/conformance/classes/propertyMemberDeclarations/assignParameterPropertyToPropertyDeclarationESNext.ts(13,16): error TS2729: Property 'foo' is used before its initialization. ==== tests/cases/conformance/classes/propertyMemberDeclarations/assignParameterPropertyToPropertyDeclarationESNext.ts (5 errors) ==== class C { qux = this.bar // should error ~~~ !!! error TS2729: Property 'bar' is used before its initialization. !!! related TS2728 tests/cases/conformance/classes/propertyMemberDeclarations/assignParameterPropertyToPropertyDeclarationESNext.ts:3:5: 'bar' is declared here. bar = this.foo // should error ~~~ !!! error TS2729: Property 'foo' is used before its initialization. !!! related TS2728 tests/cases/conformance/classes/propertyMemberDeclarations/assignParameterPropertyToPropertyDeclarationESNext.ts:11:17: 'foo' is declared here. quiz = this.bar // ok quench = this.m1() // ok quanch = this.m3() // should error ~~ !!! error TS2729: Property 'm3' is used before its initialization. !!! related TS2728 tests/cases/conformance/classes/propertyMemberDeclarations/assignParameterPropertyToPropertyDeclarationESNext.ts:10:5: 'm3' is declared here. m1() { this.foo // ok } m3 = function() { } constructor(public foo: string) {} quim = this.baz // should error ~~~ !!! error TS2729: Property 'baz' is used before its initialization. !!! related TS2728 tests/cases/conformance/classes/propertyMemberDeclarations/assignParameterPropertyToPropertyDeclarationESNext.ts:13:5: 'baz' is declared here. baz = this.foo; // should error ~~~ !!! error TS2729: Property 'foo' is used before its initialization. !!! related TS2728 tests/cases/conformance/classes/propertyMemberDeclarations/assignParameterPropertyToPropertyDeclarationESNext.ts:11:17: 'foo' is declared here. quid = this.baz // ok m2() { this.foo // ok } } class D extends C { quill = this.foo // ok } class E { bar = () => this.foo1 + this.foo2; // both ok foo1 = ''; constructor(public foo2: string) {} } class F { Inner = class extends F { p2 = this.p1 } p1 = 0 } class G { Inner = class extends G { p2 = this.p1 } constructor(public p1: number) {} } class H { constructor(public p1: C) {} public p2 = () => { return this.p1.foo; } public p3 = () => this.p1.foo; }