Skip to content

Commit 2970fae

Browse files
Fix annotated nested binding implicit-any diagnostic
Co-authored-by: RyanCavanaugh <[email protected]>
1 parent 505cc66 commit 2970fae

4 files changed

Lines changed: 104 additions & 1 deletion

File tree

‎tsc/internal/checker/checker.go‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17156,7 +17156,8 @@ func (c *Checker) padObjectLiteralType(t *Type, pattern *ast.Node) *Type {
1715617156
}
1715717157
for _, e := range missingElements {
1715817158
symbol := c.newSymbol(ast.SymbolFlagsProperty|ast.SymbolFlagsOptional, c.getPropertyNameFromBindingElement(e))
17159-
c.valueSymbolLinks.Get(symbol).resolvedType = c.getTypeFromBindingElement(e, false /*includePatternInType*/, true /*reportErrors*/)
17159+
reportErrors := ast.GetRootDeclaration(e).Type() == nil
17160+
c.valueSymbolLinks.Get(symbol).resolvedType = c.getTypeFromBindingElement(e, false /*includePatternInType*/, reportErrors)
1716017161
members[symbol.Name] = symbol
1716117162
}
1716217163
result := c.newAnonymousType(t.symbol, members, nil, nil, c.getIndexInfosOfType(t))
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
//// [tests/cases/compiler/objectBindingPatternDefaultAnnotated.ts] ////
2+
3+
=== objectBindingPatternDefaultAnnotated.ts ===
4+
interface Inner {
5+
>Inner : Symbol(Inner, Decl(objectBindingPatternDefaultAnnotated.ts, 0, 0))
6+
7+
a?: number;
8+
>a : Symbol(Inner.a, Decl(objectBindingPatternDefaultAnnotated.ts, 0, 17))
9+
10+
b?: number;
11+
>b : Symbol(Inner.b, Decl(objectBindingPatternDefaultAnnotated.ts, 1, 15))
12+
}
13+
14+
interface Outer {
15+
>Outer : Symbol(Outer, Decl(objectBindingPatternDefaultAnnotated.ts, 3, 1))
16+
17+
inner?: Inner;
18+
>inner : Symbol(Outer.inner, Decl(objectBindingPatternDefaultAnnotated.ts, 5, 17))
19+
>Inner : Symbol(Inner, Decl(objectBindingPatternDefaultAnnotated.ts, 0, 0))
20+
}
21+
22+
export function withSibling({ inner: { a = 1, b } = {} }: Outer) {
23+
>withSibling : Symbol(withSibling, Decl(objectBindingPatternDefaultAnnotated.ts, 7, 1))
24+
>inner : Symbol(Outer.inner, Decl(objectBindingPatternDefaultAnnotated.ts, 5, 17))
25+
>a : Symbol(a, Decl(objectBindingPatternDefaultAnnotated.ts, 9, 38))
26+
>b : Symbol(b, Decl(objectBindingPatternDefaultAnnotated.ts, 9, 45))
27+
>Outer : Symbol(Outer, Decl(objectBindingPatternDefaultAnnotated.ts, 3, 1))
28+
29+
return [a, b];
30+
>a : Symbol(a, Decl(objectBindingPatternDefaultAnnotated.ts, 9, 38))
31+
>b : Symbol(b, Decl(objectBindingPatternDefaultAnnotated.ts, 9, 45))
32+
}
33+
34+
export function alone({ inner: { b } = {} }: Outer) {
35+
>alone : Symbol(alone, Decl(objectBindingPatternDefaultAnnotated.ts, 11, 1))
36+
>inner : Symbol(Outer.inner, Decl(objectBindingPatternDefaultAnnotated.ts, 5, 17))
37+
>b : Symbol(b, Decl(objectBindingPatternDefaultAnnotated.ts, 13, 32))
38+
>Outer : Symbol(Outer, Decl(objectBindingPatternDefaultAnnotated.ts, 3, 1))
39+
40+
return b;
41+
>b : Symbol(b, Decl(objectBindingPatternDefaultAnnotated.ts, 13, 32))
42+
}
43+
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
//// [tests/cases/compiler/objectBindingPatternDefaultAnnotated.ts] ////
2+
3+
=== objectBindingPatternDefaultAnnotated.ts ===
4+
interface Inner {
5+
a?: number;
6+
>a : number | undefined
7+
8+
b?: number;
9+
>b : number | undefined
10+
}
11+
12+
interface Outer {
13+
inner?: Inner;
14+
>inner : Inner | undefined
15+
}
16+
17+
export function withSibling({ inner: { a = 1, b } = {} }: Outer) {
18+
>withSibling : ({ inner: { a, b } }: Outer) => (number | undefined)[]
19+
>inner : any
20+
>a : number
21+
>1 : 1
22+
>b : number | undefined
23+
>{} : {}
24+
25+
return [a, b];
26+
>[a, b] : (number | undefined)[]
27+
>a : number
28+
>b : number | undefined
29+
}
30+
31+
export function alone({ inner: { b } = {} }: Outer) {
32+
>alone : ({ inner: { b } }: Outer) => number | undefined
33+
>inner : any
34+
>b : number | undefined
35+
>{} : {}
36+
37+
return b;
38+
>b : number | undefined
39+
}
40+
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// @strict: true
2+
// @noEmit: true
3+
4+
interface Inner {
5+
a?: number;
6+
b?: number;
7+
}
8+
9+
interface Outer {
10+
inner?: Inner;
11+
}
12+
13+
export function withSibling({ inner: { a = 1, b } = {} }: Outer) {
14+
return [a, b];
15+
}
16+
17+
export function alone({ inner: { b } = {} }: Outer) {
18+
return b;
19+
}

0 commit comments

Comments
 (0)