diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index cb3fc5614fb86..f9b6af65f9da8 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1211,8 +1211,8 @@ namespace ts { : false; } if (meaning & SymbolFlags.Value && result.flags & SymbolFlags.Variable) { - // parameter initializer will lookup as normal variable scope when targeting es2015+ - if (compilerOptions.target && compilerOptions.target >= ScriptTarget.ES2015 && isParameter(lastLocation) && result.valueDeclaration !== lastLocation) { + // expression inside parameter will lookup as normal variable scope when targeting es2015+ + if (compilerOptions.target && compilerOptions.target >= ScriptTarget.ES2015 && isParameter(lastLocation) && !isParameterPropertyDeclaration(lastLocation) && result.valueDeclaration !== lastLocation) { useResult = false; } else if (result.flags & SymbolFlags.FunctionScopedVariable) { diff --git a/tests/baselines/reference/parameterInitializersForwardReferencing1.errors.txt b/tests/baselines/reference/parameterInitializersForwardReferencing1.errors.txt index 055a37838f100..94f4175f5e5c2 100644 --- a/tests/baselines/reference/parameterInitializersForwardReferencing1.errors.txt +++ b/tests/baselines/reference/parameterInitializersForwardReferencing1.errors.txt @@ -51,4 +51,8 @@ tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts(29 !!! related TS2728 tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts:30:9: 'foo' is declared here. let foo: number = 2; } + + class Foo { + constructor(public x = 12, public y = x) {} + } \ No newline at end of file diff --git a/tests/baselines/reference/parameterInitializersForwardReferencing1.js b/tests/baselines/reference/parameterInitializersForwardReferencing1.js index ad68f64ca2c58..bb3a4c87e6954 100644 --- a/tests/baselines/reference/parameterInitializersForwardReferencing1.js +++ b/tests/baselines/reference/parameterInitializersForwardReferencing1.js @@ -30,6 +30,10 @@ function f6 (async = async) { function f7({[foo]: bar}: any[]) { let foo: number = 2; } + +class Foo { + constructor(public x = 12, public y = x) {} +} //// [parameterInitializersForwardReferencing1.js] @@ -68,3 +72,12 @@ function f7(_a) { var _b = foo, bar = _a[_b]; var foo = 2; } +var Foo = /** @class */ (function () { + function Foo(x, y) { + if (x === void 0) { x = 12; } + if (y === void 0) { y = x; } + this.x = x; + this.y = y; + } + return Foo; +}()); diff --git a/tests/baselines/reference/parameterInitializersForwardReferencing1.symbols b/tests/baselines/reference/parameterInitializersForwardReferencing1.symbols index f3ea0f1e7e8eb..10f94a2bd64ac 100644 --- a/tests/baselines/reference/parameterInitializersForwardReferencing1.symbols +++ b/tests/baselines/reference/parameterInitializersForwardReferencing1.symbols @@ -75,3 +75,12 @@ function f7({[foo]: bar}: any[]) { >foo : Symbol(foo, Decl(parameterInitializersForwardReferencing1.ts, 29, 7)) } +class Foo { +>Foo : Symbol(Foo, Decl(parameterInitializersForwardReferencing1.ts, 30, 1)) + + constructor(public x = 12, public y = x) {} +>x : Symbol(Foo.x, Decl(parameterInitializersForwardReferencing1.ts, 33, 16)) +>y : Symbol(Foo.y, Decl(parameterInitializersForwardReferencing1.ts, 33, 30)) +>x : Symbol(x, Decl(parameterInitializersForwardReferencing1.ts, 33, 16)) +} + diff --git a/tests/baselines/reference/parameterInitializersForwardReferencing1.types b/tests/baselines/reference/parameterInitializersForwardReferencing1.types index 3a1d8d5864f3d..d6eee6a9c3005 100644 --- a/tests/baselines/reference/parameterInitializersForwardReferencing1.types +++ b/tests/baselines/reference/parameterInitializersForwardReferencing1.types @@ -82,3 +82,13 @@ function f7({[foo]: bar}: any[]) { >2 : 2 } +class Foo { +>Foo : Foo + + constructor(public x = 12, public y = x) {} +>x : number +>12 : 12 +>y : number +>x : number +} + diff --git a/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.errors.txt b/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.errors.txt index e7708894b65fd..d84519e406e31 100644 --- a/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.errors.txt +++ b/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.errors.txt @@ -38,4 +38,8 @@ tests/cases/conformance/functions/parameterInitializersForwardReferencing1_es6.t function f7({[foo]: bar}: any[]) { let foo: number = 2; } + + class Foo { + constructor(public x = 12, public y = x) {} + } \ No newline at end of file diff --git a/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.js b/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.js index 0c89b79b76434..a5b00cfeb4436 100644 --- a/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.js +++ b/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.js @@ -30,6 +30,10 @@ function f6 (async = async) { function f7({[foo]: bar}: any[]) { let foo: number = 2; } + +class Foo { + constructor(public x = 12, public y = x) {} +} //// [parameterInitializersForwardReferencing1_es6.js] @@ -57,3 +61,9 @@ function f6(async = async) { function f7({ [foo]: bar }) { let foo = 2; } +class Foo { + constructor(x = 12, y = x) { + this.x = x; + this.y = y; + } +} diff --git a/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.symbols b/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.symbols index f9366034aa6db..3d678a021ba0a 100644 --- a/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.symbols +++ b/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.symbols @@ -75,3 +75,12 @@ function f7({[foo]: bar}: any[]) { >foo : Symbol(foo, Decl(parameterInitializersForwardReferencing1_es6.ts, 29, 7)) } +class Foo { +>Foo : Symbol(Foo, Decl(parameterInitializersForwardReferencing1_es6.ts, 30, 1)) + + constructor(public x = 12, public y = x) {} +>x : Symbol(Foo.x, Decl(parameterInitializersForwardReferencing1_es6.ts, 33, 16)) +>y : Symbol(Foo.y, Decl(parameterInitializersForwardReferencing1_es6.ts, 33, 30)) +>x : Symbol(x, Decl(parameterInitializersForwardReferencing1_es6.ts, 33, 16)) +} + diff --git a/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.types b/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.types index 16bd49f1cf795..ca8ae55557e0e 100644 --- a/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.types +++ b/tests/baselines/reference/parameterInitializersForwardReferencing1_es6.types @@ -82,3 +82,13 @@ function f7({[foo]: bar}: any[]) { >2 : 2 } +class Foo { +>Foo : Foo + + constructor(public x = 12, public y = x) {} +>x : number +>12 : 12 +>y : number +>x : number +} + diff --git a/tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts b/tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts index 640900253bd9b..cf667840f204a 100644 --- a/tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts +++ b/tests/cases/conformance/functions/parameterInitializersForwardReferencing1.ts @@ -29,3 +29,7 @@ function f6 (async = async) { function f7({[foo]: bar}: any[]) { let foo: number = 2; } + +class Foo { + constructor(public x = 12, public y = x) {} +} diff --git a/tests/cases/conformance/functions/parameterInitializersForwardReferencing1_es6.ts b/tests/cases/conformance/functions/parameterInitializersForwardReferencing1_es6.ts index 55afbbf7c2f51..5643ea2cc0a34 100644 --- a/tests/cases/conformance/functions/parameterInitializersForwardReferencing1_es6.ts +++ b/tests/cases/conformance/functions/parameterInitializersForwardReferencing1_es6.ts @@ -31,3 +31,7 @@ function f6 (async = async) { function f7({[foo]: bar}: any[]) { let foo: number = 2; } + +class Foo { + constructor(public x = 12, public y = x) {} +}