Skip to content

Commit a667689

Browse files
committed
fixed an issue with reassigned parameter
1 parent f219b8e commit a667689

File tree

4 files changed

+63
-1
lines changed

4 files changed

+63
-1
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28666,7 +28666,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
2866628666
const parentType = getTypeForBindingElementParent(parent, CheckMode.Normal);
2866728667
const parentTypeConstraint = parentType && mapType(parentType, getBaseConstraintOrType);
2866828668
links.flags &= ~NodeCheckFlags.InCheckIdentifier;
28669-
if (parentTypeConstraint && parentTypeConstraint.flags & TypeFlags.Union && !(parent.kind === SyntaxKind.Parameter && isSymbolAssigned(symbol))) {
28669+
if (parentTypeConstraint && parentTypeConstraint.flags & TypeFlags.Union && !(rootDeclaration.kind === SyntaxKind.Parameter && isSymbolAssigned(symbol))) {
2867028670
const pattern = declaration.parent;
2867128671
const narrowedType = getFlowTypeOfReference(pattern, parentTypeConstraint, parentTypeConstraint, /*flowContainer*/ undefined, location.flowNode);
2867228672
if (narrowedType.flags & TypeFlags.Never) {

tests/baselines/reference/dependentDestructuredVariablesFromNestedPatterns.symbols

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,28 @@ async function test3() {
111111
>p1 : Symbol(p1, Decl(dependentDestructuredVariablesFromNestedPatterns.ts, 29, 10))
112112
}
113113

114+
function test4([[p1, p1Error]]: [[undefined, Error] | [number, undefined]]) {
115+
>test4 : Symbol(test4, Decl(dependentDestructuredVariablesFromNestedPatterns.ts, 36, 1))
116+
>p1 : Symbol(p1, Decl(dependentDestructuredVariablesFromNestedPatterns.ts, 38, 17))
117+
>p1Error : Symbol(p1Error, Decl(dependentDestructuredVariablesFromNestedPatterns.ts, 38, 20))
118+
>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2022.error.d.ts, --, --))
119+
120+
if (Math.random()) {
121+
>Math.random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --))
122+
>Math : Symbol(Math, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
123+
>random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --))
124+
125+
p1 = undefined;
126+
>p1 : Symbol(p1, Decl(dependentDestructuredVariablesFromNestedPatterns.ts, 38, 17))
127+
>undefined : Symbol(undefined)
128+
}
129+
if (p1Error) {
130+
>p1Error : Symbol(p1Error, Decl(dependentDestructuredVariablesFromNestedPatterns.ts, 38, 20))
131+
132+
return;
133+
}
134+
135+
p1;
136+
>p1 : Symbol(p1, Decl(dependentDestructuredVariablesFromNestedPatterns.ts, 38, 17))
137+
}
138+

tests/baselines/reference/dependentDestructuredVariablesFromNestedPatterns.types

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,3 +122,29 @@ async function test3() {
122122
>p1 : number
123123
}
124124

125+
function test4([[p1, p1Error]]: [[undefined, Error] | [number, undefined]]) {
126+
>test4 : ([[p1, p1Error]]: [[undefined, Error] | [number, undefined]]) => void
127+
>p1 : number | undefined
128+
>p1Error : Error | undefined
129+
130+
if (Math.random()) {
131+
>Math.random() : number
132+
>Math.random : () => number
133+
>Math : Math
134+
>random : () => number
135+
136+
p1 = undefined;
137+
>p1 = undefined : undefined
138+
>p1 : number | undefined
139+
>undefined : undefined
140+
}
141+
if (p1Error) {
142+
>p1Error : Error | undefined
143+
144+
return;
145+
}
146+
147+
p1;
148+
>p1 : number | undefined
149+
}
150+

tests/cases/conformance/controlFlow/dependentDestructuredVariablesFromNestedPatterns.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,14 @@ async function test3() {
4040

4141
p1;
4242
}
43+
44+
function test4([[p1, p1Error]]: [[undefined, Error] | [number, undefined]]) {
45+
if (Math.random()) {
46+
p1 = undefined;
47+
}
48+
if (p1Error) {
49+
return;
50+
}
51+
52+
p1;
53+
}

0 commit comments

Comments
 (0)