From f2747a6b345b9a7f118770982b852c5f17e56643 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Fri, 29 Dec 2017 16:09:33 -0800 Subject: [PATCH 1/2] Use emptyObjectType for omitted members instead of unknownType --- src/compiler/checker.ts | 2 +- ...clarationEmitDestructuringArrayPattern2.js | 2 +- ...rationEmitDestructuringArrayPattern2.types | 8 +++---- .../declarationsAndAssignments.types | 18 +++++++-------- ...ArrayBindingPatternAndAssignment1ES5.types | 22 +++++++++---------- ...dingPatternAndAssignment1ES5iterable.types | 22 +++++++++---------- ...ArrayBindingPatternAndAssignment1ES6.types | 22 +++++++++---------- ...rayBindingPatternAndAssignment2.errors.txt | 8 ++++++- ...ingArrayBindingPatternAndAssignment2.types | 2 +- ...destructuringVariableDeclaration1ES5.types | 6 ++--- ...uringVariableDeclaration1ES5iterable.types | 6 ++--- ...destructuringVariableDeclaration1ES6.types | 6 ++--- .../reference/downlevelLetConst12.types | 8 +++---- .../reference/downlevelLetConst16.types | 12 +++++----- ...zedDestructuringAssignmentTypes.errors.txt | 9 ++++++++ ...initializedDestructuringAssignmentTypes.js | 8 +++++++ ...alizedDestructuringAssignmentTypes.symbols | 9 ++++++++ ...tializedDestructuringAssignmentTypes.types | 19 ++++++++++++++++ ...initializedDestructuringAssignmentTypes.ts | 3 +++ 19 files changed, 123 insertions(+), 69 deletions(-) create mode 100644 tests/baselines/reference/initializedDestructuringAssignmentTypes.errors.txt create mode 100644 tests/baselines/reference/initializedDestructuringAssignmentTypes.js create mode 100644 tests/baselines/reference/initializedDestructuringAssignmentTypes.symbols create mode 100644 tests/baselines/reference/initializedDestructuringAssignmentTypes.types create mode 100644 tests/cases/compiler/initializedDestructuringAssignmentTypes.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 3f5d2cf68fe42..55754f729f1df 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -14507,7 +14507,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(emptyObjectType); } } } diff --git a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.js b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.js index 818b3a6f7a97b..7c6b0fc3cd60a 100644 --- a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.js +++ b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.js @@ -22,7 +22,7 @@ var _m = [[x13, y13], { x: x13, y: y13 }], a3 = _m[0], b3 = _m[1]; //// [declarationEmitDestructuringArrayPattern2.d.ts] declare var x10: number, y10: string, z10: boolean; declare var x11: number, y11: string; -declare var a11: any, b11: any, c11: any; +declare var a11: {}, b11: {}, c11: {}; declare var a2: number, b2: string, x12: number, c2: boolean; declare var x13: number, y13: string; declare var a3: (string | number)[], b3: { diff --git a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.types b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.types index 45f76b94b51e3..5e0de094a51e9 100644 --- a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.types +++ b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.types @@ -20,10 +20,10 @@ var [x11 = 0, y11 = ""] = [1, "hello"]; >"hello" : "hello" var [a11, b11, c11] = []; ->a11 : any ->b11 : any ->c11 : any ->[] : [any, any, any] +>a11 : {} +>b11 : {} +>c11 : {} +>[] : [{}, {}, {}] var [a2, [b2, { x12, y12: c2 }]=["abc", { x12: 10, y12: false }]] = [1, ["hello", { x12: 5, y12: true }]]; >a2 : number diff --git a/tests/baselines/reference/declarationsAndAssignments.types b/tests/baselines/reference/declarationsAndAssignments.types index b49868c475083..09d90add67d63 100644 --- a/tests/baselines/reference/declarationsAndAssignments.types +++ b/tests/baselines/reference/declarationsAndAssignments.types @@ -23,8 +23,8 @@ function f0() { var [x, y, z] = [1, "hello"]; >x : number >y : string ->z : any ->[1, "hello"] : [number, string, any] +>z : {} +>[1, "hello"] : [number, string, {}] >1 : 1 >"hello" : "hello" @@ -255,16 +255,16 @@ function f8() { >f8 : () => void var [a, b, c] = []; // Ok, [] is an array ->a : any ->b : any ->c : any ->[] : [any, any, any] +>a : {} +>b : {} +>c : {} +>[] : [{}, {}, {}] var [d, e, f] = [1]; // Error, [1] is a tuple >d : number ->e : any ->f : any ->[1] : [number, any, any] +>e : {} +>f : {} +>[1] : [number, {}, {}] >1 : 1 } diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types index e42d08bbebc8b..3a92d292cdefd 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types @@ -92,19 +92,19 @@ var [c0, c1] = [...temp]; >temp : number[] var [c2] = []; ->c2 : any ->[] : [any] +>c2 : {} +>[] : [{}] var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]] ->c3 : any ->c4 : any ->[[[]], [[[[]]]]] : [[[any]], [[[[any]]]]] ->[[]] : [[any]] ->[] : [any] ->[[[[]]]] : [[[[any]]]] ->[[[]]] : [[[any]]] ->[[]] : [[any]] ->[] : [any] +>c3 : {} +>c4 : {} +>[[[]], [[[[]]]]] : [[[{}]], [[[[{}]]]]] +>[[]] : [[{}]] +>[] : [{}] +>[[[[]]]] : [[[[{}]]]] +>[[[]]] : [[[{}]]] +>[[]] : [[{}]] +>[] : [{}] var [[c5], c6]: [[string|number], boolean] = [[1], true]; >c5 : string | number diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types index 68b6565b004fa..7350ed100364c 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types @@ -92,19 +92,19 @@ var [c0, c1] = [...temp]; >temp : number[] var [c2] = []; ->c2 : any ->[] : [any] +>c2 : {} +>[] : [{}] var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]] ->c3 : any ->c4 : any ->[[[]], [[[[]]]]] : [[[any]], [[[[any]]]]] ->[[]] : [[any]] ->[] : [any] ->[[[[]]]] : [[[[any]]]] ->[[[]]] : [[[any]]] ->[[]] : [[any]] ->[] : [any] +>c3 : {} +>c4 : {} +>[[[]], [[[[]]]]] : [[[{}]], [[[[{}]]]]] +>[[]] : [[{}]] +>[] : [{}] +>[[[[]]]] : [[[[{}]]]] +>[[[]]] : [[[{}]]] +>[[]] : [[{}]] +>[] : [{}] var [[c5], c6]: [[string|number], boolean] = [[1], true]; >c5 : string | number diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types index 8bde2455171b0..d5937f0818f7d 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types @@ -92,19 +92,19 @@ var [c0, c1] = [...temp]; >temp : number[] var [c2] = []; ->c2 : any ->[] : [any] +>c2 : {} +>[] : [{}] var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]] ->c3 : any ->c4 : any ->[[[]], [[[[]]]]] : [[[any]], [[[[any]]]]] ->[[]] : [[any]] ->[] : [any] ->[[[[]]]] : [[[[any]]]] ->[[[]]] : [[[any]]] ->[[]] : [[any]] ->[] : [any] +>c3 : {} +>c4 : {} +>[[[]], [[[[]]]]] : [[[{}]], [[[[{}]]]]] +>[[]] : [[{}]] +>[] : [{}] +>[[[[]]]] : [[[[{}]]]] +>[[[]]] : [[[{}]]] +>[[]] : [[{}]] +>[] : [{}] var [[c5], c6]: [[string|number], boolean] = [[1], true]; >c5 : string | number diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt index 610167a1bc0c7..c5591707e7012 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt @@ -1,4 +1,6 @@ +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,6): error TS2461: Type '{}' 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 '{}' 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 '{}' 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 '{}' 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 ~~~~~~~~~~~~~~ diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.types index dc76e8a4a8af0..c345312f74e0a 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.types @@ -4,7 +4,7 @@ var [[a0], [[a1]]] = [] // Error >a0 : any >a1 : any ->[] : [any, any] +>[] : [{}, {}] var [[a2], [[a3]]] = undefined // Error >a2 : any diff --git a/tests/baselines/reference/destructuringVariableDeclaration1ES5.types b/tests/baselines/reference/destructuringVariableDeclaration1ES5.types index 1502288895bd5..170f929d96070 100644 --- a/tests/baselines/reference/destructuringVariableDeclaration1ES5.types +++ b/tests/baselines/reference/destructuringVariableDeclaration1ES5.types @@ -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; }, {}]; } +>f : [number, number, { f3: number; f5: number; }, {}] +>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, {}] >1 : 1 >2 : 2 >{ f3: 4, f5: 0 } : { f3: number; f5: number; } diff --git a/tests/baselines/reference/destructuringVariableDeclaration1ES5iterable.types b/tests/baselines/reference/destructuringVariableDeclaration1ES5iterable.types index 1a4b35b373b86..d180e86b0786e 100644 --- a/tests/baselines/reference/destructuringVariableDeclaration1ES5iterable.types +++ b/tests/baselines/reference/destructuringVariableDeclaration1ES5iterable.types @@ -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; }, {}]; } +>f : [number, number, { f3: number; f5: number; }, {}] +>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, {}] >1 : 1 >2 : 2 >{ f3: 4, f5: 0 } : { f3: number; f5: number; } diff --git a/tests/baselines/reference/destructuringVariableDeclaration1ES6.types b/tests/baselines/reference/destructuringVariableDeclaration1ES6.types index c71e74c059406..f5e531367a3ec 100644 --- a/tests/baselines/reference/destructuringVariableDeclaration1ES6.types +++ b/tests/baselines/reference/destructuringVariableDeclaration1ES6.types @@ -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; }, {}]; } +>f : [number, number, { f3: number; f5: number; }, {}] +>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, {}] >1 : 1 >2 : 2 >{ f3: 4, f5: 0 } : { f3: number; f5: number; } diff --git a/tests/baselines/reference/downlevelLetConst12.types b/tests/baselines/reference/downlevelLetConst12.types index 918d6c94e579a..9229cb0a9f1d2 100644 --- a/tests/baselines/reference/downlevelLetConst12.types +++ b/tests/baselines/reference/downlevelLetConst12.types @@ -11,8 +11,8 @@ const bar = 1; >1 : 1 let [baz] = []; ->baz : any ->[] : [any] +>baz : {} +>[] : [{}] let {a: baz2} = { a: 1 }; >a : any @@ -22,8 +22,8 @@ let {a: baz2} = { a: 1 }; >1 : 1 const [baz3] = [] ->baz3 : any ->[] : [any] +>baz3 : {} +>[] : [{}] const {a: baz4} = { a: 1 }; >a : any diff --git a/tests/baselines/reference/downlevelLetConst16.types b/tests/baselines/reference/downlevelLetConst16.types index cc9d0f1a2ca06..ca160c5a45d79 100644 --- a/tests/baselines/reference/downlevelLetConst16.types +++ b/tests/baselines/reference/downlevelLetConst16.types @@ -515,13 +515,13 @@ function foo3() { >x : any } for (let [y] = []; ;) { ->y : any ->[] : [any] +>y : {} +>[] : [{}] use(y); >use(y) : any >use : (a: any) => any ->y : any +>y : {} } for (let {a: z} = {a: 1}; ;) { >a : any @@ -554,13 +554,13 @@ function foo4() { >x : 1 } for (const [y] = []; ;) { ->y : any ->[] : [any] +>y : {} +>[] : [{}] use(y); >use(y) : any >use : (a: any) => any ->y : any +>y : {} } for (const {a: z} = { a: 1 }; ;) { >a : any diff --git a/tests/baselines/reference/initializedDestructuringAssignmentTypes.errors.txt b/tests/baselines/reference/initializedDestructuringAssignmentTypes.errors.txt new file mode 100644 index 0000000000000..c954deeb1f3f6 --- /dev/null +++ b/tests/baselines/reference/initializedDestructuringAssignmentTypes.errors.txt @@ -0,0 +1,9 @@ +tests/cases/compiler/initializedDestructuringAssignmentTypes.ts(3,3): error TS2339: Property 'toFixed' does not exist on type '{}'. + + +==== tests/cases/compiler/initializedDestructuringAssignmentTypes.ts (1 errors) ==== + const [, a = ''] = ''.match('') || []; + + a.toFixed() + ~~~~~~~ +!!! error TS2339: Property 'toFixed' does not exist on type '{}'. \ No newline at end of file diff --git a/tests/baselines/reference/initializedDestructuringAssignmentTypes.js b/tests/baselines/reference/initializedDestructuringAssignmentTypes.js new file mode 100644 index 0000000000000..ee38f30ef5f92 --- /dev/null +++ b/tests/baselines/reference/initializedDestructuringAssignmentTypes.js @@ -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(); diff --git a/tests/baselines/reference/initializedDestructuringAssignmentTypes.symbols b/tests/baselines/reference/initializedDestructuringAssignmentTypes.symbols new file mode 100644 index 0000000000000..7d9cf531f0d6a --- /dev/null +++ b/tests/baselines/reference/initializedDestructuringAssignmentTypes.symbols @@ -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)) + diff --git a/tests/baselines/reference/initializedDestructuringAssignmentTypes.types b/tests/baselines/reference/initializedDestructuringAssignmentTypes.types new file mode 100644 index 0000000000000..2fde943923e14 --- /dev/null +++ b/tests/baselines/reference/initializedDestructuringAssignmentTypes.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/initializedDestructuringAssignmentTypes.ts === +const [, a = ''] = ''.match('') || []; +> : undefined +>a : {} +>'' : "" +>''.match('') || [] : RegExpMatchArray | [{}, ""] +>''.match('') : RegExpMatchArray +>''.match : (regexp: string | RegExp) => RegExpMatchArray +>'' : "" +>match : (regexp: string | RegExp) => RegExpMatchArray +>'' : "" +>[] : [{}, ""] + +a.toFixed() +>a.toFixed() : any +>a.toFixed : any +>a : {} +>toFixed : any + diff --git a/tests/cases/compiler/initializedDestructuringAssignmentTypes.ts b/tests/cases/compiler/initializedDestructuringAssignmentTypes.ts new file mode 100644 index 0000000000000..bc3ec4ca4070e --- /dev/null +++ b/tests/cases/compiler/initializedDestructuringAssignmentTypes.ts @@ -0,0 +1,3 @@ +const [, a = ''] = ''.match('') || []; + +a.toFixed() \ No newline at end of file From 0a1a864cc27dd6e08871cc949db9c6ff45bc89e8 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Tue, 2 Jan 2018 10:29:16 -0800 Subject: [PATCH 2/2] Use similar logic as is used for empty arrays for missing elements --- src/compiler/checker.ts | 2 +- ...clarationEmitDestructuringArrayPattern2.js | 2 +- ...rationEmitDestructuringArrayPattern2.types | 8 +++---- .../declarationsAndAssignments.types | 18 +++++++-------- ...ArrayBindingPatternAndAssignment1ES5.types | 22 +++++++++---------- ...dingPatternAndAssignment1ES5iterable.types | 22 +++++++++---------- ...ArrayBindingPatternAndAssignment1ES6.types | 22 +++++++++---------- ...rayBindingPatternAndAssignment2.errors.txt | 8 +++---- ...ingArrayBindingPatternAndAssignment2.types | 2 +- ...destructuringVariableDeclaration1ES5.types | 6 ++--- ...uringVariableDeclaration1ES5iterable.types | 6 ++--- ...destructuringVariableDeclaration1ES6.types | 6 ++--- .../reference/downlevelLetConst12.types | 8 +++---- .../reference/downlevelLetConst16.types | 12 +++++----- ...zedDestructuringAssignmentTypes.errors.txt | 4 ++-- ...tializedDestructuringAssignmentTypes.types | 8 +++---- 16 files changed, 78 insertions(+), 78 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 55754f729f1df..fc394551270f8 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -14507,7 +14507,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(emptyObjectType); + elementTypes.push(strictNullChecks ? implicitNeverType : undefinedWideningType); } } } diff --git a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.js b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.js index 7c6b0fc3cd60a..818b3a6f7a97b 100644 --- a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.js +++ b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.js @@ -22,7 +22,7 @@ var _m = [[x13, y13], { x: x13, y: y13 }], a3 = _m[0], b3 = _m[1]; //// [declarationEmitDestructuringArrayPattern2.d.ts] declare var x10: number, y10: string, z10: boolean; declare var x11: number, y11: string; -declare var a11: {}, b11: {}, c11: {}; +declare var a11: any, b11: any, c11: any; declare var a2: number, b2: string, x12: number, c2: boolean; declare var x13: number, y13: string; declare var a3: (string | number)[], b3: { diff --git a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.types b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.types index 5e0de094a51e9..807bb15493587 100644 --- a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.types +++ b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.types @@ -20,10 +20,10 @@ var [x11 = 0, y11 = ""] = [1, "hello"]; >"hello" : "hello" var [a11, b11, c11] = []; ->a11 : {} ->b11 : {} ->c11 : {} ->[] : [{}, {}, {}] +>a11 : any +>b11 : any +>c11 : any +>[] : [undefined, undefined, undefined] var [a2, [b2, { x12, y12: c2 }]=["abc", { x12: 10, y12: false }]] = [1, ["hello", { x12: 5, y12: true }]]; >a2 : number diff --git a/tests/baselines/reference/declarationsAndAssignments.types b/tests/baselines/reference/declarationsAndAssignments.types index 09d90add67d63..6bd5b8da7cb94 100644 --- a/tests/baselines/reference/declarationsAndAssignments.types +++ b/tests/baselines/reference/declarationsAndAssignments.types @@ -23,8 +23,8 @@ function f0() { var [x, y, z] = [1, "hello"]; >x : number >y : string ->z : {} ->[1, "hello"] : [number, string, {}] +>z : any +>[1, "hello"] : [number, string, undefined] >1 : 1 >"hello" : "hello" @@ -255,16 +255,16 @@ function f8() { >f8 : () => void var [a, b, c] = []; // Ok, [] is an array ->a : {} ->b : {} ->c : {} ->[] : [{}, {}, {}] +>a : any +>b : any +>c : any +>[] : [undefined, undefined, undefined] var [d, e, f] = [1]; // Error, [1] is a tuple >d : number ->e : {} ->f : {} ->[1] : [number, {}, {}] +>e : any +>f : any +>[1] : [number, undefined, undefined] >1 : 1 } diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types index 3a92d292cdefd..bddce3cc3913f 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types @@ -92,19 +92,19 @@ var [c0, c1] = [...temp]; >temp : number[] var [c2] = []; ->c2 : {} ->[] : [{}] +>c2 : any +>[] : [undefined] var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]] ->c3 : {} ->c4 : {} ->[[[]], [[[[]]]]] : [[[{}]], [[[[{}]]]]] ->[[]] : [[{}]] ->[] : [{}] ->[[[[]]]] : [[[[{}]]]] ->[[[]]] : [[[{}]]] ->[[]] : [[{}]] ->[] : [{}] +>c3 : any +>c4 : any +>[[[]], [[[[]]]]] : [[[undefined]], [[[[undefined]]]]] +>[[]] : [[undefined]] +>[] : [undefined] +>[[[[]]]] : [[[[undefined]]]] +>[[[]]] : [[[undefined]]] +>[[]] : [[undefined]] +>[] : [undefined] var [[c5], c6]: [[string|number], boolean] = [[1], true]; >c5 : string | number diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types index 7350ed100364c..e17e37f49809f 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types @@ -92,19 +92,19 @@ var [c0, c1] = [...temp]; >temp : number[] var [c2] = []; ->c2 : {} ->[] : [{}] +>c2 : any +>[] : [undefined] var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]] ->c3 : {} ->c4 : {} ->[[[]], [[[[]]]]] : [[[{}]], [[[[{}]]]]] ->[[]] : [[{}]] ->[] : [{}] ->[[[[]]]] : [[[[{}]]]] ->[[[]]] : [[[{}]]] ->[[]] : [[{}]] ->[] : [{}] +>c3 : any +>c4 : any +>[[[]], [[[[]]]]] : [[[undefined]], [[[[undefined]]]]] +>[[]] : [[undefined]] +>[] : [undefined] +>[[[[]]]] : [[[[undefined]]]] +>[[[]]] : [[[undefined]]] +>[[]] : [[undefined]] +>[] : [undefined] var [[c5], c6]: [[string|number], boolean] = [[1], true]; >c5 : string | number diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types index d5937f0818f7d..0c6b87eb46aa5 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types @@ -92,19 +92,19 @@ var [c0, c1] = [...temp]; >temp : number[] var [c2] = []; ->c2 : {} ->[] : [{}] +>c2 : any +>[] : [undefined] var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]] ->c3 : {} ->c4 : {} ->[[[]], [[[[]]]]] : [[[{}]], [[[[{}]]]]] ->[[]] : [[{}]] ->[] : [{}] ->[[[[]]]] : [[[[{}]]]] ->[[[]]] : [[[{}]]] ->[[]] : [[{}]] ->[] : [{}] +>c3 : any +>c4 : any +>[[[]], [[[[]]]]] : [[[undefined]], [[[[undefined]]]]] +>[[]] : [[undefined]] +>[] : [undefined] +>[[[[]]]] : [[[[undefined]]]] +>[[[]]] : [[[undefined]]] +>[[]] : [[undefined]] +>[] : [undefined] var [[c5], c6]: [[string|number], boolean] = [[1], true]; >c5 : string | number diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt index c5591707e7012..848093e11616a 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt @@ -1,6 +1,6 @@ -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,6): error TS2461: Type '{}' is not an array type. +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 '{}' is not an array type. +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]'. @@ -17,11 +17,11 @@ tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAss // S is the type Any, or var [[a0], [[a1]]] = [] // Error ~~~~ -!!! error TS2461: Type '{}' is not an array type. +!!! 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 '{}' is not an array type. +!!! 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 diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.types index c345312f74e0a..9c29ea1a423bf 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.types @@ -4,7 +4,7 @@ var [[a0], [[a1]]] = [] // Error >a0 : any >a1 : any ->[] : [{}, {}] +>[] : [undefined, undefined] var [[a2], [[a3]]] = undefined // Error >a2 : any diff --git a/tests/baselines/reference/destructuringVariableDeclaration1ES5.types b/tests/baselines/reference/destructuringVariableDeclaration1ES5.types index 170f929d96070..125fd8a2c216c 100644 --- a/tests/baselines/reference/destructuringVariableDeclaration1ES5.types +++ b/tests/baselines/reference/destructuringVariableDeclaration1ES5.types @@ -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; }, {}]; } ->f : [number, number, { f3: number; f5: number; }, {}] ->[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, {}] +>{ 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; } diff --git a/tests/baselines/reference/destructuringVariableDeclaration1ES5iterable.types b/tests/baselines/reference/destructuringVariableDeclaration1ES5iterable.types index d180e86b0786e..d97bb20d24ae4 100644 --- a/tests/baselines/reference/destructuringVariableDeclaration1ES5iterable.types +++ b/tests/baselines/reference/destructuringVariableDeclaration1ES5iterable.types @@ -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; }, {}]; } ->f : [number, number, { f3: number; f5: number; }, {}] ->[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, {}] +>{ 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; } diff --git a/tests/baselines/reference/destructuringVariableDeclaration1ES6.types b/tests/baselines/reference/destructuringVariableDeclaration1ES6.types index f5e531367a3ec..ec42861b2fcc9 100644 --- a/tests/baselines/reference/destructuringVariableDeclaration1ES6.types +++ b/tests/baselines/reference/destructuringVariableDeclaration1ES6.types @@ -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; }, {}]; } ->f : [number, number, { f3: number; f5: number; }, {}] ->[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, {}] +>{ 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; } diff --git a/tests/baselines/reference/downlevelLetConst12.types b/tests/baselines/reference/downlevelLetConst12.types index 9229cb0a9f1d2..725e446e010db 100644 --- a/tests/baselines/reference/downlevelLetConst12.types +++ b/tests/baselines/reference/downlevelLetConst12.types @@ -11,8 +11,8 @@ const bar = 1; >1 : 1 let [baz] = []; ->baz : {} ->[] : [{}] +>baz : any +>[] : [undefined] let {a: baz2} = { a: 1 }; >a : any @@ -22,8 +22,8 @@ let {a: baz2} = { a: 1 }; >1 : 1 const [baz3] = [] ->baz3 : {} ->[] : [{}] +>baz3 : any +>[] : [undefined] const {a: baz4} = { a: 1 }; >a : any diff --git a/tests/baselines/reference/downlevelLetConst16.types b/tests/baselines/reference/downlevelLetConst16.types index ca160c5a45d79..5655b1f8f15d3 100644 --- a/tests/baselines/reference/downlevelLetConst16.types +++ b/tests/baselines/reference/downlevelLetConst16.types @@ -515,13 +515,13 @@ function foo3() { >x : any } for (let [y] = []; ;) { ->y : {} ->[] : [{}] +>y : any +>[] : [undefined] use(y); >use(y) : any >use : (a: any) => any ->y : {} +>y : any } for (let {a: z} = {a: 1}; ;) { >a : any @@ -554,13 +554,13 @@ function foo4() { >x : 1 } for (const [y] = []; ;) { ->y : {} ->[] : [{}] +>y : any +>[] : [undefined] use(y); >use(y) : any >use : (a: any) => any ->y : {} +>y : any } for (const {a: z} = { a: 1 }; ;) { >a : any diff --git a/tests/baselines/reference/initializedDestructuringAssignmentTypes.errors.txt b/tests/baselines/reference/initializedDestructuringAssignmentTypes.errors.txt index c954deeb1f3f6..9a8cb12b45b61 100644 --- a/tests/baselines/reference/initializedDestructuringAssignmentTypes.errors.txt +++ b/tests/baselines/reference/initializedDestructuringAssignmentTypes.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/initializedDestructuringAssignmentTypes.ts(3,3): error TS2339: Property 'toFixed' does not exist on type '{}'. +tests/cases/compiler/initializedDestructuringAssignmentTypes.ts(3,3): error TS2339: Property 'toFixed' does not exist on type 'string'. ==== tests/cases/compiler/initializedDestructuringAssignmentTypes.ts (1 errors) ==== @@ -6,4 +6,4 @@ tests/cases/compiler/initializedDestructuringAssignmentTypes.ts(3,3): error TS23 a.toFixed() ~~~~~~~ -!!! error TS2339: Property 'toFixed' does not exist on type '{}'. \ No newline at end of file +!!! error TS2339: Property 'toFixed' does not exist on type 'string'. \ No newline at end of file diff --git a/tests/baselines/reference/initializedDestructuringAssignmentTypes.types b/tests/baselines/reference/initializedDestructuringAssignmentTypes.types index 2fde943923e14..55ddfa4f56b52 100644 --- a/tests/baselines/reference/initializedDestructuringAssignmentTypes.types +++ b/tests/baselines/reference/initializedDestructuringAssignmentTypes.types @@ -1,19 +1,19 @@ === tests/cases/compiler/initializedDestructuringAssignmentTypes.ts === const [, a = ''] = ''.match('') || []; > : undefined ->a : {} +>a : string >'' : "" ->''.match('') || [] : RegExpMatchArray | [{}, ""] +>''.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 : {} +>a : string >toFixed : any