Skip to content

Commit b5fda49

Browse files
authored
Use emptyObjectType for omitted members instead of unknownType (microsoft#20940)
* Use emptyObjectType for omitted members instead of unknownType * Use similar logic as is used for empty arrays for missing elements
1 parent 20c846d commit b5fda49

18 files changed

Lines changed: 98 additions & 44 deletions

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14523,7 +14523,7 @@ namespace ts {
1452314523
if (patternElement.kind !== SyntaxKind.OmittedExpression) {
1452414524
error(patternElement, Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value);
1452514525
}
14526-
elementTypes.push(unknownType);
14526+
elementTypes.push(strictNullChecks ? implicitNeverType : undefinedWideningType);
1452714527
}
1452814528
}
1452914529
}

tests/baselines/reference/declarationEmitDestructuringArrayPattern2.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var [a11, b11, c11] = [];
2323
>a11 : any
2424
>b11 : any
2525
>c11 : any
26-
>[] : [any, any, any]
26+
>[] : [undefined, undefined, undefined]
2727

2828
var [a2, [b2, { x12, y12: c2 }]=["abc", { x12: 10, y12: false }]] = [1, ["hello", { x12: 5, y12: true }]];
2929
>a2 : number

tests/baselines/reference/declarationsAndAssignments.types

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ function f0() {
2424
>x : number
2525
>y : string
2626
>z : any
27-
>[1, "hello"] : [number, string, any]
27+
>[1, "hello"] : [number, string, undefined]
2828
>1 : 1
2929
>"hello" : "hello"
3030

@@ -258,13 +258,13 @@ function f8() {
258258
>a : any
259259
>b : any
260260
>c : any
261-
>[] : [any, any, any]
261+
>[] : [undefined, undefined, undefined]
262262

263263
var [d, e, f] = [1]; // Error, [1] is a tuple
264264
>d : number
265265
>e : any
266266
>f : any
267-
>[1] : [number, any, any]
267+
>[1] : [number, undefined, undefined]
268268
>1 : 1
269269
}
270270

tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,18 +93,18 @@ var [c0, c1] = [...temp];
9393

9494
var [c2] = [];
9595
>c2 : any
96-
>[] : [any]
96+
>[] : [undefined]
9797

9898
var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]]
9999
>c3 : any
100100
>c4 : any
101-
>[[[]], [[[[]]]]] : [[[any]], [[[[any]]]]]
102-
>[[]] : [[any]]
103-
>[] : [any]
104-
>[[[[]]]] : [[[[any]]]]
105-
>[[[]]] : [[[any]]]
106-
>[[]] : [[any]]
107-
>[] : [any]
101+
>[[[]], [[[[]]]]] : [[[undefined]], [[[[undefined]]]]]
102+
>[[]] : [[undefined]]
103+
>[] : [undefined]
104+
>[[[[]]]] : [[[[undefined]]]]
105+
>[[[]]] : [[[undefined]]]
106+
>[[]] : [[undefined]]
107+
>[] : [undefined]
108108

109109
var [[c5], c6]: [[string|number], boolean] = [[1], true];
110110
>c5 : string | number

tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,18 +93,18 @@ var [c0, c1] = [...temp];
9393

9494
var [c2] = [];
9595
>c2 : any
96-
>[] : [any]
96+
>[] : [undefined]
9797

9898
var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]]
9999
>c3 : any
100100
>c4 : any
101-
>[[[]], [[[[]]]]] : [[[any]], [[[[any]]]]]
102-
>[[]] : [[any]]
103-
>[] : [any]
104-
>[[[[]]]] : [[[[any]]]]
105-
>[[[]]] : [[[any]]]
106-
>[[]] : [[any]]
107-
>[] : [any]
101+
>[[[]], [[[[]]]]] : [[[undefined]], [[[[undefined]]]]]
102+
>[[]] : [[undefined]]
103+
>[] : [undefined]
104+
>[[[[]]]] : [[[[undefined]]]]
105+
>[[[]]] : [[[undefined]]]
106+
>[[]] : [[undefined]]
107+
>[] : [undefined]
108108

109109
var [[c5], c6]: [[string|number], boolean] = [[1], true];
110110
>c5 : string | number

tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,18 +93,18 @@ var [c0, c1] = [...temp];
9393

9494
var [c2] = [];
9595
>c2 : any
96-
>[] : [any]
96+
>[] : [undefined]
9797

9898
var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]]
9999
>c3 : any
100100
>c4 : any
101-
>[[[]], [[[[]]]]] : [[[any]], [[[[any]]]]]
102-
>[[]] : [[any]]
103-
>[] : [any]
104-
>[[[[]]]] : [[[[any]]]]
105-
>[[[]]] : [[[any]]]
106-
>[[]] : [[any]]
107-
>[] : [any]
101+
>[[[]], [[[[]]]]] : [[[undefined]], [[[[undefined]]]]]
102+
>[[]] : [[undefined]]
103+
>[] : [undefined]
104+
>[[[[]]]] : [[[[undefined]]]]
105+
>[[[]]] : [[[undefined]]]
106+
>[[]] : [[undefined]]
107+
>[] : [undefined]
108108

109109
var [[c5], c6]: [[string|number], boolean] = [[1], true];
110110
>c5 : string | number

tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,6): error TS2461: Type 'undefined' is not an array type.
12
tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,6): error TS2525: Initializer provides no value for this binding element and the binding element has no default value.
3+
tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,12): error TS2461: Type 'undefined' is not an array type.
24
tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,12): error TS2525: Initializer provides no value for this binding element and the binding element has no default value.
35
tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(4,5): error TS2461: Type 'undefined' is not an array type.
46
tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(9,5): error TS2322: Type '[number, number, string]' is not assignable to type '[number, boolean, string]'.
@@ -10,13 +12,17 @@ tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAss
1012
tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(34,5): error TS2461: Type 'F' is not an array type.
1113

1214

13-
==== tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts (7 errors) ====
15+
==== tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts (9 errors) ====
1416
// V is an array assignment pattern, S is the type Any or an array-like type (section 3.3.2), and, for each assignment element E in V,
1517
// S is the type Any, or
1618
var [[a0], [[a1]]] = [] // Error
1719
~~~~
20+
!!! error TS2461: Type 'undefined' is not an array type.
21+
~~~~
1822
!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value.
1923
~~~~~~
24+
!!! error TS2461: Type 'undefined' is not an array type.
25+
~~~~~~
2026
!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value.
2127
var [[a2], [[a3]]] = undefined // Error
2228
~~~~~~~~~~~~~~

tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
var [[a0], [[a1]]] = [] // Error
55
>a0 : any
66
>a1 : any
7-
>[] : [any, any]
7+
>[] : [undefined, undefined]
88

99
var [[a2], [[a3]]] = undefined // Error
1010
>a2 : any

tests/baselines/reference/destructuringVariableDeclaration1ES5.types

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,9 @@ var {f: [f1, f2, { f3: f4, f5 }, , ]} = { f: [1, 2, { f3: 4, f5: 0 }] };
151151
>f4 : number
152152
>f5 : number
153153
> : undefined
154-
>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, any]; }
155-
>f : [number, number, { f3: number; f5: number; }, any]
156-
>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, any]
154+
>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, undefined]; }
155+
>f : [number, number, { f3: number; f5: number; }, undefined]
156+
>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, undefined]
157157
>1 : 1
158158
>2 : 2
159159
>{ f3: 4, f5: 0 } : { f3: number; f5: number; }

tests/baselines/reference/destructuringVariableDeclaration1ES5iterable.types

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,9 @@ var {f: [f1, f2, { f3: f4, f5 }, , ]} = { f: [1, 2, { f3: 4, f5: 0 }] };
151151
>f4 : number
152152
>f5 : number
153153
> : undefined
154-
>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, any]; }
155-
>f : [number, number, { f3: number; f5: number; }, any]
156-
>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, any]
154+
>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, undefined]; }
155+
>f : [number, number, { f3: number; f5: number; }, undefined]
156+
>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, undefined]
157157
>1 : 1
158158
>2 : 2
159159
>{ f3: 4, f5: 0 } : { f3: number; f5: number; }

0 commit comments

Comments
 (0)