From 39e68564ff986bb0414449965ec0c95d0cdaf292 Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Tue, 5 May 2020 16:50:31 -0700 Subject: [PATCH] Fix regression in name resolution in parameter --- src/compiler/checker.ts | 4 +++- .../parameterInitializersBackwardReferencing.ts | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 tests/cases/conformance/functions/parameterInitializersBackwardReferencing.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 7a70426aae835..1d8524e5fd311 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1889,7 +1889,9 @@ namespace ts { lastLocation === (location as BindingElement).name && isBindingPattern(lastLocation))) { const root = getRootDeclaration(location); if (root.kind === SyntaxKind.Parameter) { - associatedDeclarationForContainingInitializerOrBindingName = location as BindingElement; + if (!associatedDeclarationForContainingInitializerOrBindingName) { + associatedDeclarationForContainingInitializerOrBindingName = location as BindingElement; + } } } break; diff --git a/tests/cases/conformance/functions/parameterInitializersBackwardReferencing.ts b/tests/cases/conformance/functions/parameterInitializersBackwardReferencing.ts new file mode 100644 index 0000000000000..dce4818a5094e --- /dev/null +++ b/tests/cases/conformance/functions/parameterInitializersBackwardReferencing.ts @@ -0,0 +1,13 @@ +// @target: es5, es2015, esnext +// @noEmit: true +// @noTypesAndSymbols: true + +// https://github.com/microsoft/TypeScript/issues/38243 + +function test0({ a = 0, b = a } = {}) { + return { a, b }; +} + +function test1({ c: { a = 0, b = a } = {} } = {}) { + return { a, b }; +} \ No newline at end of file