mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-06 23:59:42 -05:00
Use emptyObjectType for omitted members instead of unknownType (#20940)
* Use emptyObjectType for omitted members instead of unknownType * Use similar logic as is used for empty arrays for missing elements
This commit is contained in:
@@ -14523,7 +14523,7 @@ namespace ts {
|
||||
if (patternElement.kind !== SyntaxKind.OmittedExpression) {
|
||||
error(patternElement, Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value);
|
||||
}
|
||||
elementTypes.push(unknownType);
|
||||
elementTypes.push(strictNullChecks ? implicitNeverType : undefinedWideningType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ var [a11, b11, c11] = [];
|
||||
>a11 : any
|
||||
>b11 : any
|
||||
>c11 : any
|
||||
>[] : [any, any, any]
|
||||
>[] : [undefined, undefined, undefined]
|
||||
|
||||
var [a2, [b2, { x12, y12: c2 }]=["abc", { x12: 10, y12: false }]] = [1, ["hello", { x12: 5, y12: true }]];
|
||||
>a2 : number
|
||||
|
||||
@@ -24,7 +24,7 @@ function f0() {
|
||||
>x : number
|
||||
>y : string
|
||||
>z : any
|
||||
>[1, "hello"] : [number, string, any]
|
||||
>[1, "hello"] : [number, string, undefined]
|
||||
>1 : 1
|
||||
>"hello" : "hello"
|
||||
|
||||
@@ -258,13 +258,13 @@ function f8() {
|
||||
>a : any
|
||||
>b : any
|
||||
>c : any
|
||||
>[] : [any, any, any]
|
||||
>[] : [undefined, undefined, undefined]
|
||||
|
||||
var [d, e, f] = [1]; // Error, [1] is a tuple
|
||||
>d : number
|
||||
>e : any
|
||||
>f : any
|
||||
>[1] : [number, any, any]
|
||||
>[1] : [number, undefined, undefined]
|
||||
>1 : 1
|
||||
}
|
||||
|
||||
|
||||
@@ -93,18 +93,18 @@ var [c0, c1] = [...temp];
|
||||
|
||||
var [c2] = [];
|
||||
>c2 : any
|
||||
>[] : [any]
|
||||
>[] : [undefined]
|
||||
|
||||
var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]]
|
||||
>c3 : any
|
||||
>c4 : any
|
||||
>[[[]], [[[[]]]]] : [[[any]], [[[[any]]]]]
|
||||
>[[]] : [[any]]
|
||||
>[] : [any]
|
||||
>[[[[]]]] : [[[[any]]]]
|
||||
>[[[]]] : [[[any]]]
|
||||
>[[]] : [[any]]
|
||||
>[] : [any]
|
||||
>[[[]], [[[[]]]]] : [[[undefined]], [[[[undefined]]]]]
|
||||
>[[]] : [[undefined]]
|
||||
>[] : [undefined]
|
||||
>[[[[]]]] : [[[[undefined]]]]
|
||||
>[[[]]] : [[[undefined]]]
|
||||
>[[]] : [[undefined]]
|
||||
>[] : [undefined]
|
||||
|
||||
var [[c5], c6]: [[string|number], boolean] = [[1], true];
|
||||
>c5 : string | number
|
||||
|
||||
@@ -93,18 +93,18 @@ var [c0, c1] = [...temp];
|
||||
|
||||
var [c2] = [];
|
||||
>c2 : any
|
||||
>[] : [any]
|
||||
>[] : [undefined]
|
||||
|
||||
var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]]
|
||||
>c3 : any
|
||||
>c4 : any
|
||||
>[[[]], [[[[]]]]] : [[[any]], [[[[any]]]]]
|
||||
>[[]] : [[any]]
|
||||
>[] : [any]
|
||||
>[[[[]]]] : [[[[any]]]]
|
||||
>[[[]]] : [[[any]]]
|
||||
>[[]] : [[any]]
|
||||
>[] : [any]
|
||||
>[[[]], [[[[]]]]] : [[[undefined]], [[[[undefined]]]]]
|
||||
>[[]] : [[undefined]]
|
||||
>[] : [undefined]
|
||||
>[[[[]]]] : [[[[undefined]]]]
|
||||
>[[[]]] : [[[undefined]]]
|
||||
>[[]] : [[undefined]]
|
||||
>[] : [undefined]
|
||||
|
||||
var [[c5], c6]: [[string|number], boolean] = [[1], true];
|
||||
>c5 : string | number
|
||||
|
||||
@@ -93,18 +93,18 @@ var [c0, c1] = [...temp];
|
||||
|
||||
var [c2] = [];
|
||||
>c2 : any
|
||||
>[] : [any]
|
||||
>[] : [undefined]
|
||||
|
||||
var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]]
|
||||
>c3 : any
|
||||
>c4 : any
|
||||
>[[[]], [[[[]]]]] : [[[any]], [[[[any]]]]]
|
||||
>[[]] : [[any]]
|
||||
>[] : [any]
|
||||
>[[[[]]]] : [[[[any]]]]
|
||||
>[[[]]] : [[[any]]]
|
||||
>[[]] : [[any]]
|
||||
>[] : [any]
|
||||
>[[[]], [[[[]]]]] : [[[undefined]], [[[[undefined]]]]]
|
||||
>[[]] : [[undefined]]
|
||||
>[] : [undefined]
|
||||
>[[[[]]]] : [[[[undefined]]]]
|
||||
>[[[]]] : [[[undefined]]]
|
||||
>[[]] : [[undefined]]
|
||||
>[] : [undefined]
|
||||
|
||||
var [[c5], c6]: [[string|number], boolean] = [[1], true];
|
||||
>c5 : string | number
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,6): error TS2461: Type 'undefined' is not an array type.
|
||||
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.
|
||||
tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,12): error TS2461: Type 'undefined' is not an array type.
|
||||
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.
|
||||
tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(4,5): error TS2461: Type 'undefined' is not an array type.
|
||||
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
|
||||
tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(34,5): error TS2461: Type 'F' is not an array type.
|
||||
|
||||
|
||||
==== tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts (7 errors) ====
|
||||
==== tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts (9 errors) ====
|
||||
// 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,
|
||||
// S is the type Any, or
|
||||
var [[a0], [[a1]]] = [] // Error
|
||||
~~~~
|
||||
!!! error TS2461: Type 'undefined' is not an array type.
|
||||
~~~~
|
||||
!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value.
|
||||
~~~~~~
|
||||
!!! error TS2461: Type 'undefined' is not an array type.
|
||||
~~~~~~
|
||||
!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value.
|
||||
var [[a2], [[a3]]] = undefined // Error
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
var [[a0], [[a1]]] = [] // Error
|
||||
>a0 : any
|
||||
>a1 : any
|
||||
>[] : [any, any]
|
||||
>[] : [undefined, undefined]
|
||||
|
||||
var [[a2], [[a3]]] = undefined // Error
|
||||
>a2 : any
|
||||
|
||||
@@ -151,9 +151,9 @@ var {f: [f1, f2, { f3: f4, f5 }, , ]} = { f: [1, 2, { f3: 4, f5: 0 }] };
|
||||
>f4 : number
|
||||
>f5 : number
|
||||
> : undefined
|
||||
>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, any]; }
|
||||
>f : [number, number, { f3: number; f5: number; }, any]
|
||||
>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, any]
|
||||
>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, undefined]; }
|
||||
>f : [number, number, { f3: number; f5: number; }, undefined]
|
||||
>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, undefined]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>{ f3: 4, f5: 0 } : { f3: number; f5: number; }
|
||||
|
||||
@@ -151,9 +151,9 @@ var {f: [f1, f2, { f3: f4, f5 }, , ]} = { f: [1, 2, { f3: 4, f5: 0 }] };
|
||||
>f4 : number
|
||||
>f5 : number
|
||||
> : undefined
|
||||
>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, any]; }
|
||||
>f : [number, number, { f3: number; f5: number; }, any]
|
||||
>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, any]
|
||||
>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, undefined]; }
|
||||
>f : [number, number, { f3: number; f5: number; }, undefined]
|
||||
>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, undefined]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>{ f3: 4, f5: 0 } : { f3: number; f5: number; }
|
||||
|
||||
@@ -151,9 +151,9 @@ var {f: [f1, f2, { f3: f4, f5 }, , ]} = { f: [1, 2, { f3: 4, f5: 0 }] };
|
||||
>f4 : number
|
||||
>f5 : number
|
||||
> : undefined
|
||||
>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, any]; }
|
||||
>f : [number, number, { f3: number; f5: number; }, any]
|
||||
>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, any]
|
||||
>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, undefined]; }
|
||||
>f : [number, number, { f3: number; f5: number; }, undefined]
|
||||
>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, undefined]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>{ f3: 4, f5: 0 } : { f3: number; f5: number; }
|
||||
|
||||
@@ -12,7 +12,7 @@ const bar = 1;
|
||||
|
||||
let [baz] = [];
|
||||
>baz : any
|
||||
>[] : [any]
|
||||
>[] : [undefined]
|
||||
|
||||
let {a: baz2} = { a: 1 };
|
||||
>a : any
|
||||
@@ -23,7 +23,7 @@ let {a: baz2} = { a: 1 };
|
||||
|
||||
const [baz3] = []
|
||||
>baz3 : any
|
||||
>[] : [any]
|
||||
>[] : [undefined]
|
||||
|
||||
const {a: baz4} = { a: 1 };
|
||||
>a : any
|
||||
|
||||
@@ -516,7 +516,7 @@ function foo3() {
|
||||
}
|
||||
for (let [y] = []; ;) {
|
||||
>y : any
|
||||
>[] : [any]
|
||||
>[] : [undefined]
|
||||
|
||||
use(y);
|
||||
>use(y) : any
|
||||
@@ -555,7 +555,7 @@ function foo4() {
|
||||
}
|
||||
for (const [y] = []; ;) {
|
||||
>y : any
|
||||
>[] : [any]
|
||||
>[] : [undefined]
|
||||
|
||||
use(y);
|
||||
>use(y) : any
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
tests/cases/compiler/initializedDestructuringAssignmentTypes.ts(3,3): error TS2339: Property 'toFixed' does not exist on type 'string'.
|
||||
|
||||
|
||||
==== tests/cases/compiler/initializedDestructuringAssignmentTypes.ts (1 errors) ====
|
||||
const [, a = ''] = ''.match('') || [];
|
||||
|
||||
a.toFixed()
|
||||
~~~~~~~
|
||||
!!! error TS2339: Property 'toFixed' does not exist on type 'string'.
|
||||
@@ -0,0 +1,8 @@
|
||||
//// [initializedDestructuringAssignmentTypes.ts]
|
||||
const [, a = ''] = ''.match('') || [];
|
||||
|
||||
a.toFixed()
|
||||
|
||||
//// [initializedDestructuringAssignmentTypes.js]
|
||||
var _a = ''.match('') || [], _b = _a[1], a = _b === void 0 ? '' : _b;
|
||||
a.toFixed();
|
||||
@@ -0,0 +1,9 @@
|
||||
=== tests/cases/compiler/initializedDestructuringAssignmentTypes.ts ===
|
||||
const [, a = ''] = ''.match('') || [];
|
||||
>a : Symbol(a, Decl(initializedDestructuringAssignmentTypes.ts, 0, 8))
|
||||
>''.match : Symbol(String.match, Decl(lib.d.ts, --, --))
|
||||
>match : Symbol(String.match, Decl(lib.d.ts, --, --))
|
||||
|
||||
a.toFixed()
|
||||
>a : Symbol(a, Decl(initializedDestructuringAssignmentTypes.ts, 0, 8))
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
=== tests/cases/compiler/initializedDestructuringAssignmentTypes.ts ===
|
||||
const [, a = ''] = ''.match('') || [];
|
||||
> : undefined
|
||||
>a : string
|
||||
>'' : ""
|
||||
>''.match('') || [] : RegExpMatchArray | [undefined, ""]
|
||||
>''.match('') : RegExpMatchArray
|
||||
>''.match : (regexp: string | RegExp) => RegExpMatchArray
|
||||
>'' : ""
|
||||
>match : (regexp: string | RegExp) => RegExpMatchArray
|
||||
>'' : ""
|
||||
>[] : [undefined, ""]
|
||||
|
||||
a.toFixed()
|
||||
>a.toFixed() : any
|
||||
>a.toFixed : any
|
||||
>a : string
|
||||
>toFixed : any
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
const [, a = ''] = ''.match('') || [];
|
||||
|
||||
a.toFixed()
|
||||
Reference in New Issue
Block a user