Destructuring assignment and variable declaration

This commit is contained in:
Yui T 2015-04-14 23:44:14 -07:00
parent db492f1c10
commit 1d793f4c5e
24 changed files with 953 additions and 0 deletions

View file

@ -0,0 +1,41 @@
//// [destructuringArrayBindingPatternAndAssignment1.ts]
var [p0,p1, p2] : any = [2, 3, 4];
var [a, b, c]: [number, number, string] = [1, 2, "string"];
var [d, e]: any = undefined;
var [f = false, g = 1]: any = undefined;
g = 10;
f = true;
var [x] = []
var [[[y]], [[[[z]]]]] = [[[]], [[[[]]]]]
var [[w], m]: [[string|number], boolean] = [[1], true];
interface J extends Array<Number> {
2: number;
}
var [, w1] = [1, 2, 3];
var [,,, w2] = [1, 2, 3, 4];
var [,,, w2] = [1, 2, 3, 4];
var [,,,...w3] = [1, 2, 3, 4, "hello"];
var [r, s, ...t] = [1, 2, "string"];
var [r1, s1, t1] = [1, 2, "string"];
//// [destructuringArrayBindingPatternAndAssignment1.js]
var _a = [2, 3, 4], p0 = _a[0], p1 = _a[1], p2 = _a[2];
var _b = [1, 2, "string"], a = _b[0], b = _b[1], c = _b[2];
var d = undefined[0], e = undefined[1];
var _c = undefined[0], f = _c === void 0 ? false : _c, _d = undefined[1], g = _d === void 0 ? 1 : _d;
g = 10;
f = true;
var x = ([])[0];
var _e = [[[]], [[[[]]]]], y = _e[0][0][0], z = _e[1][0][0][0][0];
var _f = [[1], true], w = _f[0][0], m = _f[1];
var _g = [1, 2, 3], w1 = _g[1];
var _h = [1, 2, 3, 4], w2 = _h[3];
var _j = [1, 2, 3, 4], w2 = _j[3];
var _k = [1, 2, 3, 4, "hello"], w3 = _k.slice(3);
var _l = [1, 2, "string"], r = _l[0], s = _l[1], t = _l.slice(2);
var _m = [1, 2, "string"], r1 = _m[0], s1 = _m[1], t1 = _m[2];

View file

@ -0,0 +1,133 @@
=== tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1.ts ===
var [p0,p1, p2] : any = [2, 3, 4];
>p0 : any, Symbol(p0, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 0, 5))
>p1 : any, Symbol(p1, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 0, 8))
>p2 : any, Symbol(p2, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 0, 11))
>[2, 3, 4] : number[]
>2 : number
>3 : number
>4 : number
var [a, b, c]: [number, number, string] = [1, 2, "string"];
>a : number, Symbol(a, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 1, 5))
>b : number, Symbol(b, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 1, 7))
>c : string, Symbol(c, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 1, 10))
>[1, 2, "string"] : [number, number, string]
>1 : number
>2 : number
>"string" : string
var [d, e]: any = undefined;
>d : any, Symbol(d, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 2, 5))
>e : any, Symbol(e, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 2, 7))
>undefined : undefined, Symbol(undefined)
var [f = false, g = 1]: any = undefined;
>f : boolean, Symbol(f, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 3, 5))
>false : boolean
>g : number, Symbol(g, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 3, 15))
>1 : number
>undefined : undefined, Symbol(undefined)
g = 10;
>g = 10 : number
>g : number, Symbol(g, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 3, 15))
>10 : number
f = true;
>f = true : boolean
>f : boolean, Symbol(f, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 3, 5))
>true : boolean
var [x] = []
>x : any, Symbol(x, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 7, 5))
>[] : undefined[]
var [[[y]], [[[[z]]]]] = [[[]], [[[[]]]]]
>y : any, Symbol(y, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 8, 7))
>z : any, Symbol(z, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 8, 16))
>[[[]], [[[[]]]]] : [[undefined[]], [[[undefined[]]]]]
>[[]] : [undefined[]]
>[] : undefined[]
>[[[[]]]] : [[[undefined[]]]]
>[[[]]] : [[undefined[]]]
>[[]] : [undefined[]]
>[] : undefined[]
var [[w], m]: [[string|number], boolean] = [[1], true];
>w : string | number, Symbol(w, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 9, 6))
>m : boolean, Symbol(m, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 9, 9))
>[[1], true] : [[number], boolean]
>[1] : [number]
>1 : number
>true : boolean
interface J extends Array<Number> {
>J : J, Symbol(J, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 9, 55))
>Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11))
>Number : Number, Symbol(Number, Decl(lib.d.ts, 456, 40), Decl(lib.d.ts, 518, 11))
2: number;
}
var [, w1] = [1, 2, 3];
> : undefined
>w1 : number, Symbol(w1, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 14, 6))
>[1, 2, 3] : [number, number, number]
>1 : number
>2 : number
>3 : number
var [,,, w2] = [1, 2, 3, 4];
> : undefined
> : undefined
> : undefined
>w2 : number, Symbol(w2, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 15, 8), Decl(destructuringArrayBindingPatternAndAssignment1.ts, 16, 8))
>[1, 2, 3, 4] : [number, number, number, number]
>1 : number
>2 : number
>3 : number
>4 : number
var [,,, w2] = [1, 2, 3, 4];
> : undefined
> : undefined
> : undefined
>w2 : number, Symbol(w2, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 15, 8), Decl(destructuringArrayBindingPatternAndAssignment1.ts, 16, 8))
>[1, 2, 3, 4] : [number, number, number, number]
>1 : number
>2 : number
>3 : number
>4 : number
var [,,,...w3] = [1, 2, 3, 4, "hello"];
> : undefined
> : undefined
> : undefined
>w3 : (string | number)[], Symbol(w3, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 17, 8))
>[1, 2, 3, 4, "hello"] : (string | number)[]
>1 : number
>2 : number
>3 : number
>4 : number
>"hello" : string
var [r, s, ...t] = [1, 2, "string"];
>r : string | number, Symbol(r, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 19, 5))
>s : string | number, Symbol(s, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 19, 7))
>t : (string | number)[], Symbol(t, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 19, 10))
>[1, 2, "string"] : (string | number)[]
>1 : number
>2 : number
>"string" : string
var [r1, s1, t1] = [1, 2, "string"];
>r1 : number, Symbol(r1, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 20, 5))
>s1 : number, Symbol(s1, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 20, 8))
>t1 : string, Symbol(t1, Decl(destructuringArrayBindingPatternAndAssignment1.ts, 20, 12))
>[1, 2, "string"] : [number, number, string]
>1 : number
>2 : number
>"string" : string

View file

@ -0,0 +1,25 @@
//// [destructuringArrayBindingPatternAndAssignment2.ts]
function foo() {
return [1, 2, 3];
}
interface J extends Array<Number> {
2: number;
}
function bar(): J {
return <[number, number, number]>[1, 2, 3];
}
var [j, k] = foo();
var [...p] = foo();
//// [destructuringArrayBindingPatternAndAssignment2.js]
function foo() {
return [1, 2, 3];
}
function bar() {
return [1, 2, 3];
}
var _a = foo(), j = _a[0], k = _a[1];
var _b = foo(), p = _b.slice(0);

View file

@ -0,0 +1,41 @@
=== tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts ===
function foo() {
>foo : () => number[], Symbol(foo, Decl(destructuringArrayBindingPatternAndAssignment2.ts, 0, 0))
return [1, 2, 3];
>[1, 2, 3] : number[]
>1 : number
>2 : number
>3 : number
}
interface J extends Array<Number> {
>J : J, Symbol(J, Decl(destructuringArrayBindingPatternAndAssignment2.ts, 2, 1))
>Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11))
>Number : Number, Symbol(Number, Decl(lib.d.ts, 456, 40), Decl(lib.d.ts, 518, 11))
2: number;
}
function bar(): J {
>bar : () => J, Symbol(bar, Decl(destructuringArrayBindingPatternAndAssignment2.ts, 5, 1))
>J : J, Symbol(J, Decl(destructuringArrayBindingPatternAndAssignment2.ts, 2, 1))
return <[number, number, number]>[1, 2, 3];
><[number, number, number]>[1, 2, 3] : [number, number, number]
>[1, 2, 3] : [number, number, number]
>1 : number
>2 : number
>3 : number
}
var [j, k] = foo();
>j : number, Symbol(j, Decl(destructuringArrayBindingPatternAndAssignment2.ts, 11, 5))
>k : number, Symbol(k, Decl(destructuringArrayBindingPatternAndAssignment2.ts, 11, 7))
>foo() : number[]
>foo : () => number[], Symbol(foo, Decl(destructuringArrayBindingPatternAndAssignment2.ts, 0, 0))
var [...p] = foo();
>p : number[], Symbol(p, Decl(destructuringArrayBindingPatternAndAssignment2.ts, 12, 5))
>foo() : number[]
>foo : () => number[], Symbol(foo, Decl(destructuringArrayBindingPatternAndAssignment2.ts, 0, 0))

View file

@ -0,0 +1,51 @@
tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment3.ts(19,5): error TS2322: Type 'undefined[]' is not assignable to type 'H'.
Property '0' is missing in type 'undefined[]'.
tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment3.ts(19,5): error TS2461: Type 'H' is not an array type.
tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment3.ts(20,6): error TS2461: Type 'undefined' is not an array type.
tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment3.ts(20,13): error TS2461: Type 'undefined' is not an array type.
tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment3.ts(21,13): error TS2462: A rest element must be last in an array destructuring pattern
tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment3.ts(22,6): error TS2322: Type 'string' is not assignable to type 'Number'.
Property 'toFixed' is missing in type 'String'.
tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment3.ts(23,5): error TS2461: Type '{}' is not an array type.
==== tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment3.ts (7 errors) ====
interface H {
0: number,
1: string
}
interface J extends Array<Number> {
2: number;
}
function bar(): J {
return <[number, number, number]>[1, 2, 3];
}
function gg(idx: number) {
return {
[idx]: true
}
}
var [h, g, i]: H = [];
~~~~~~~~~
!!! error TS2322: Type 'undefined[]' is not assignable to type 'H'.
!!! error TS2322: Property '0' is missing in type 'undefined[]'.
~~~~~~~~~
!!! error TS2461: Type 'H' is not an array type.
var [[[y]], [[[[z]]]]] = []
~~~~~
!!! error TS2461: Type 'undefined' is not an array type.
~~~~~~~~~
!!! error TS2461: Type 'undefined' is not an array type.
var [, , ...w4, , ] = []
~~
!!! error TS2462: A rest element must be last in an array destructuring pattern
var [a = "string", b, c] = bar();
~
!!! error TS2322: Type 'string' is not assignable to type 'Number'.
!!! error TS2322: Property 'toFixed' is missing in type 'String'.
var [r, s, t] = gg(1);
~~~~~~~~~
!!! error TS2461: Type '{}' is not an array type.

View file

@ -0,0 +1,41 @@
//// [destructuringArrayBindingPatternAndAssignment3.ts]
interface H {
0: number,
1: string
}
interface J extends Array<Number> {
2: number;
}
function bar(): J {
return <[number, number, number]>[1, 2, 3];
}
function gg(idx: number) {
return {
[idx]: true
}
}
var [h, g, i]: H = [];
var [[[y]], [[[[z]]]]] = []
var [, , ...w4, , ] = []
var [a = "string", b, c] = bar();
var [r, s, t] = gg(1);
//// [destructuringArrayBindingPatternAndAssignment3.js]
function bar() {
return [1, 2, 3];
}
function gg(idx) {
return (_a = {},
_a[idx] = true,
_a
);
var _a;
}
var _a = [], h = _a[0], g = _a[1], i = _a[2];
var _b = [], y = _b[0][0][0], z = _b[1][0][0][0][0];
var _c = [];
var _d = bar(), _e = _d[0], a = _e === void 0 ? "string" : _e, b = _d[1], c = _d[2];
var _f = gg(1), r = _f[0], s = _f[1], t = _f[2];

View file

@ -0,0 +1,27 @@
//// [destructuringObjectBindingPatternAndAssignment1.ts]
var c = 0;
var { a, } = { a:1, };
var { b: { c } } = { b: { c } };
var { b1: { c1 } = { c1: "string" } } = { b1: { c1: "world" } };
var { d1 }: any = undefined;
var { e1 }: any = {};
var { f: {f1} = { f1: "string" } }: any = {};
var { f2: {f21} = { f21: "string" } }: any = undefined;
var { e1: {e2} = { e2: "string" } }: any|{ e1: { e2 } } = undefined;
var { e2: {e3} = { e3: "string" } }: any|{ e2: { e3 } } = {};
var {g = 1}: any = { g: 100000 };
var {1: x} = { 1: "string" };
//// [destructuringObjectBindingPatternAndAssignment1.js]
var c = 0;
var a = ({ a: 1 }).a;
var c = ({ b: { c: c } }).b.c;
var _a = ({ b1: { c1: "world" } }).b1, c1 = (_a === void 0 ? { c1: "string" } : _a).c1;
var d1 = undefined.d1;
var e1 = ({}).e1;
var _b = ({}).f, f1 = (_b === void 0 ? { f1: "string" } : _b).f1;
var _c = undefined.f2, f21 = (_c === void 0 ? { f21: "string" } : _c).f21;
var _d = undefined.e1, e2 = (_d === void 0 ? { e2: "string" } : _d).e2;
var _e = ({}).e2, e3 = (_e === void 0 ? { e3: "string" } : _e).e3;
var _f = ({ g: 100000 }).g, g = _f === void 0 ? 1 : _f;
var x = ({ 1: "string" })[1];

View file

@ -0,0 +1,87 @@
=== tests/cases/conformance/es6/destructuring/destructuringObjectBindingPatternAndAssignment1.ts ===
var c = 0;
>c : number, Symbol(c, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 0, 3), Decl(destructuringObjectBindingPatternAndAssignment1.ts, 2, 10))
>0 : number
var { a, } = { a:1, };
>a : number, Symbol(a, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 1, 5))
>{ a:1, } : { a: number; }
>a : number, Symbol(a, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 1, 14))
>1 : number
var { b: { c } } = { b: { c } };
>b : any
>c : number, Symbol(c, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 0, 3), Decl(destructuringObjectBindingPatternAndAssignment1.ts, 2, 10))
>{ b: { c } } : { b: { c: number; }; }
>b : { c: number; }, Symbol(b, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 2, 21))
>{ c } : { c: number; }
>c : number, Symbol(c, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 2, 26))
var { b1: { c1 } = { c1: "string" } } = { b1: { c1: "world" } };
>b1 : any
>c1 : string, Symbol(c1, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 3, 11))
>{ c1: "string" } : { c1: string; }
>c1 : string, Symbol(c1, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 3, 20))
>"string" : string
>{ b1: { c1: "world" } } : { b1: { c1: string; }; }
>b1 : { c1: string; }, Symbol(b1, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 3, 42))
>{ c1: "world" } : { c1: string; }
>c1 : string, Symbol(c1, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 3, 48))
>"world" : string
var { d1 }: any = undefined;
>d1 : any, Symbol(d1, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 4, 5))
>undefined : undefined, Symbol(undefined)
var { e1 }: any = {};
>e1 : any, Symbol(e1, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 5, 5))
>{} : {}
var { f: {f1} = { f1: "string" } }: any = {};
>f : any
>f1 : string, Symbol(f1, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 6, 10))
>{ f1: "string" } : { f1: string; }
>f1 : string, Symbol(f1, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 6, 17))
>"string" : string
>{} : {}
var { f2: {f21} = { f21: "string" } }: any = undefined;
>f2 : any
>f21 : string, Symbol(f21, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 7, 11))
>{ f21: "string" } : { f21: string; }
>f21 : string, Symbol(f21, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 7, 19))
>"string" : string
>undefined : undefined, Symbol(undefined)
var { e1: {e2} = { e2: "string" } }: any|{ e1: { e2 } } = undefined;
>e1 : any
>e2 : string, Symbol(e2, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 8, 11))
>{ e2: "string" } : { e2: string; }
>e2 : string, Symbol(e2, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 8, 18))
>"string" : string
>e1 : { e2: any; }, Symbol(e1, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 8, 42))
>e2 : any, Symbol(e2, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 8, 48))
>undefined : undefined, Symbol(undefined)
var { e2: {e3} = { e3: "string" } }: any|{ e2: { e3 } } = {};
>e2 : any
>e3 : string, Symbol(e3, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 9, 11))
>{ e3: "string" } : { e3: string; }
>e3 : string, Symbol(e3, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 9, 18))
>"string" : string
>e2 : { e3: any; }, Symbol(e2, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 9, 42))
>e3 : any, Symbol(e3, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 9, 48))
>{} : {}
var {g = 1}: any = { g: 100000 };
>g : number, Symbol(g, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 10, 5))
>1 : number
>{ g: 100000 } : { g: number; }
>g : number, Symbol(g, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 10, 20))
>100000 : number
var {1: x} = { 1: "string" };
>x : string, Symbol(x, Decl(destructuringObjectBindingPatternAndAssignment1.ts, 11, 5))
>{ 1: "string" } : { 1: string; }
>"string" : string

View file

@ -0,0 +1,76 @@
//// [destructuringObjectBindingPatternAndAssignment2.ts]
interface I {
j: number;
[str: string]: number;
}
interface J {
[str: string]: number;
}
function zz() {
return {
"cat": "dog",
}
}
function zz1(): J {
return {
"cat": 1,
}
}
function yy() {
return {}
}
var {j}: I| J = { j: 1000 };
var {cat} = zz();
var {"cat":cart} = zz();
var {can}: J = {};
var {can1}: J = zz1();
function f() {
var { z }: { z: number } = { z };
}
interface K {
[idx: number]: boolean
}
var {1: boo}: K = { 1: true };
var {1: boo1}: K = { };
function bar(): K {
return { };
}
var {1: baz} = bar();
//// [destructuringObjectBindingPatternAndAssignment2.js]
function zz() {
return {
"cat": "dog"
};
}
function zz1() {
return {
"cat": 1
};
}
function yy() {
return {};
}
var j = ({ j: 1000 }).j;
var cat = (zz()).cat;
var cart = (zz())["cat"];
var can = ({}).can;
var can1 = (zz1()).can1;
function f() {
var z = ({ z: z }).z;
}
var boo = ({ 1: true })[1];
var boo1 = ({})[1];
function bar() {
return {};
}
var baz = (bar())[1];

View file

@ -0,0 +1,116 @@
=== tests/cases/conformance/es6/destructuring/destructuringObjectBindingPatternAndAssignment2.ts ===
interface I {
>I : I, Symbol(I, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 0, 0))
j: number;
>j : number, Symbol(j, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 0, 13))
[str: string]: number;
>str : string, Symbol(str, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 2, 5))
}
interface J {
>J : J, Symbol(J, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 3, 1))
[str: string]: number;
>str : string, Symbol(str, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 5, 5))
}
function zz() {
>zz : () => { "cat": string; }, Symbol(zz, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 6, 1))
return {
>{ "cat": "dog", } : { "cat": string; }
"cat": "dog",
>"dog" : string
}
}
function zz1(): J {
>zz1 : () => J, Symbol(zz1, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 11, 1))
>J : J, Symbol(J, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 3, 1))
return {
>{ "cat": 1, } : { [x: string]: number; "cat": number; }
"cat": 1,
>1 : number
}
}
function yy() {
>yy : () => {}, Symbol(yy, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 17, 1))
return {}
>{} : {}
}
var {j}: I| J = { j: 1000 };
>j : number, Symbol(j, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 23, 5))
>I : I, Symbol(I, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 0, 0))
>J : J, Symbol(J, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 3, 1))
>{ j: 1000 } : { [x: string]: number; j: number; }
>j : number, Symbol(j, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 23, 17))
>1000 : number
var {cat} = zz();
>cat : string, Symbol(cat, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 24, 5))
>zz() : { "cat": string; }
>zz : () => { "cat": string; }, Symbol(zz, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 6, 1))
var {"cat":cart} = zz();
>cart : string, Symbol(cart, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 25, 5))
>zz() : { "cat": string; }
>zz : () => { "cat": string; }, Symbol(zz, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 6, 1))
var {can}: J = {};
>can : number, Symbol(can, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 27, 5))
>J : J, Symbol(J, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 3, 1))
>{} : { [x: string]: undefined; }
var {can1}: J = zz1();
>can1 : number, Symbol(can1, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 28, 5))
>J : J, Symbol(J, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 3, 1))
>zz1() : J
>zz1 : () => J, Symbol(zz1, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 11, 1))
function f() {
>f : () => void, Symbol(f, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 28, 22))
var { z }: { z: number } = { z };
>z : number, Symbol(z, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 32, 9))
>z : number, Symbol(z, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 32, 16))
>{ z } : { z: number; }
>z : number, Symbol(z, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 32, 32))
}
interface K {
>K : K, Symbol(K, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 33, 1))
[idx: number]: boolean
>idx : number, Symbol(idx, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 36, 5))
}
var {1: boo}: K = { 1: true };
>boo : boolean, Symbol(boo, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 39, 5))
>K : K, Symbol(K, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 33, 1))
>{ 1: true } : { [x: number]: boolean; 1: boolean; }
>true : boolean
var {1: boo1}: K = { };
>boo1 : boolean, Symbol(boo1, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 40, 5))
>K : K, Symbol(K, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 33, 1))
>{ } : { [x: number]: undefined; }
function bar(): K {
>bar : () => K, Symbol(bar, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 40, 23))
>K : K, Symbol(K, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 33, 1))
return { };
>{ } : { [x: number]: undefined; }
}
var {1: baz} = bar();
>baz : boolean, Symbol(baz, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 45, 5))
>bar() : K
>bar : () => K, Symbol(bar, Decl(destructuringObjectBindingPatternAndAssignment2.ts, 40, 23))

View file

@ -0,0 +1,42 @@
tests/cases/conformance/es6/destructuring/destructuringObjectBindingPatternAndAssignment3.ts(1,7): error TS1005: ',' expected.
tests/cases/conformance/es6/destructuring/destructuringObjectBindingPatternAndAssignment3.ts(2,5): error TS2322: Type '{ i: number; }' is not assignable to type 'string | number'.
Type '{ i: number; }' is not assignable to type 'number'.
tests/cases/conformance/es6/destructuring/destructuringObjectBindingPatternAndAssignment3.ts(2,6): error TS2459: Type 'string | number' has no property 'i' and no string index signature.
tests/cases/conformance/es6/destructuring/destructuringObjectBindingPatternAndAssignment3.ts(3,6): error TS2459: Type 'string | number | {}' has no property 'i1' and no string index signature.
tests/cases/conformance/es6/destructuring/destructuringObjectBindingPatternAndAssignment3.ts(4,12): error TS2459: Type '{ f212: string; }' has no property 'f21' and no string index signature.
tests/cases/conformance/es6/destructuring/destructuringObjectBindingPatternAndAssignment3.ts(5,54): error TS2304: Cannot find name 'c'.
tests/cases/conformance/es6/destructuring/destructuringObjectBindingPatternAndAssignment3.ts(7,7): error TS1180: Property destructuring pattern expected.
tests/cases/conformance/es6/destructuring/destructuringObjectBindingPatternAndAssignment3.ts(10,7): error TS1005: ':' expected.
tests/cases/conformance/es6/destructuring/destructuringObjectBindingPatternAndAssignment3.ts(10,15): error TS1005: ':' expected.
==== tests/cases/conformance/es6/destructuring/destructuringObjectBindingPatternAndAssignment3.ts (9 errors) ====
var {h?} = { h?: 1 };
~
!!! error TS1005: ',' expected.
var {i}: string | number = { i: 2 };
~~~
!!! error TS2322: Type '{ i: number; }' is not assignable to type 'string | number'.
!!! error TS2322: Type '{ i: number; }' is not assignable to type 'number'.
~
!!! error TS2459: Type 'string | number' has no property 'i' and no string index signature.
var {i1}: string | number| {} = { i1: 2 };
~~
!!! error TS2459: Type 'string | number | {}' has no property 'i1' and no string index signature.
var { f2: {f21} = { f212: "string" } }: any = undefined;
~~~
!!! error TS2459: Type '{ f212: string; }' has no property 'f21' and no string index signature.
var { b1: { c1 } = { c1: "string" } } = { b1: { c1: c } };
~
!!! error TS2304: Cannot find name 'c'.
var { d }: any;
var { ...d1 } = {
~~~
!!! error TS1180: Property destructuring pattern expected.
a: 1, b: 1, d1: 9, e: 10
}
var {1} = { 1 };
~
!!! error TS1005: ':' expected.
~
!!! error TS1005: ':' expected.

View file

@ -0,0 +1,23 @@
//// [destructuringObjectBindingPatternAndAssignment3.ts]
var {h?} = { h?: 1 };
var {i}: string | number = { i: 2 };
var {i1}: string | number| {} = { i1: 2 };
var { f2: {f21} = { f212: "string" } }: any = undefined;
var { b1: { c1 } = { c1: "string" } } = { b1: { c1: c } };
var { d }: any;
var { ...d1 } = {
a: 1, b: 1, d1: 9, e: 10
}
var {1} = { 1 };
//// [destructuringObjectBindingPatternAndAssignment3.js]
var h = ({ h: 1 }).h;
var i = ({ i: 2 }).i;
var i1 = ({ i1: 2 }).i1;
var _a = undefined.f2, f21 = (_a === void 0 ? { f212: "string" } : _a).f21;
var _b = ({ b1: { c1: c } }).b1, c1 = (_b === void 0 ? { c1: "string" } : _b).c1;
var d = (void 0).d;
var d1 = ({
a: 1, b: 1, d1: 9, e: 10
}).d1;
var = ({ 1: })[1];

View file

@ -0,0 +1,37 @@
tests/cases/conformance/es6/destructuring/destructuringObjectBindingPatternAndAssignment4.ts(7,6): error TS2459: Type 'K | K1' has no property 'k' and no string index signature.
tests/cases/conformance/es6/destructuring/destructuringObjectBindingPatternAndAssignment4.ts(12,6): error TS2459: Type '{}' has no property '2' and no string index signature.
tests/cases/conformance/es6/destructuring/destructuringObjectBindingPatternAndAssignment4.ts(23,5): error TS2322: Type '{ "cat": string; }' is not assignable to type 'J'.
Index signature is missing in type '{ "cat": string; }'.
==== tests/cases/conformance/es6/destructuring/destructuringObjectBindingPatternAndAssignment4.ts (3 errors) ====
interface K {
[str: string]: string;
}
interface K1 {
k: string;
}
var {k}: K|K1 = { k: "string" };
~
!!! error TS2459: Type 'K | K1' has no property 'k' and no string index signature.
function barn() {
return {};
}
var {2: baz1} = barn()
~
!!! error TS2459: Type '{}' has no property '2' and no string index signature.
interface J {
[str: string]: number;
}
function zz() {
return {
"cat": "dog"
}
}
var {"can": can}: J = zz();
~~~~~~~~~~~~
!!! error TS2322: Type '{ "cat": string; }' is not assignable to type 'J'.
!!! error TS2322: Index signature is missing in type '{ "cat": string; }'.

View file

@ -0,0 +1,37 @@
//// [destructuringObjectBindingPatternAndAssignment4.ts]
interface K {
[str: string]: string;
}
interface K1 {
k: string;
}
var {k}: K|K1 = { k: "string" };
function barn() {
return {};
}
var {2: baz1} = barn()
interface J {
[str: string]: number;
}
function zz() {
return {
"cat": "dog"
}
}
var {"can": can}: J = zz();
//// [destructuringObjectBindingPatternAndAssignment4.js]
var k = ({ k: "string" }).k;
function barn() {
return {};
}
var baz1 = (barn())[2];
function zz() {
return {
"cat": "dog"
};
}
var can = (zz())["can"];

View file

@ -0,0 +1,15 @@
tests/cases/conformance/es6/destructuring/destructuringVariableDeclarationAndAssignment.ts(3,23): error TS2459: Type 'number | { b12: number; b42: number; }' has no property 'b12' and no string index signature.
tests/cases/conformance/es6/destructuring/destructuringVariableDeclarationAndAssignment.ts(3,33): error TS2459: Type 'number | { b12: number; b42: number; }' has no property 'b42' and no string index signature.
tests/cases/conformance/es6/destructuring/destructuringVariableDeclarationAndAssignment.ts(3,44): error TS2403: Subsequent variable declarations must have the same type. Variable 'c' must be of type 'number', but here has type '(number | { b12: number; b42: number; })[]'.
==== tests/cases/conformance/es6/destructuring/destructuringVariableDeclarationAndAssignment.ts (3 errors) ====
var {o: [a1, a2, a3 = { b1: 1000, b4: 200 }]} = { o: [1, 2, { b1: 4, b4: 0 }] };
var {o0: [c, d, { e: e1, f }, , ]} = { o0: [1, 2, { e: 4, f: 0 }] };
var {o1: [a11, a21, { b12: b22, b42 },, ...c]} = { o1: [1, 2, { b12: 4, b42: 0 }] };
~~~
!!! error TS2459: Type 'number | { b12: number; b42: number; }' has no property 'b12' and no string index signature.
~~~
!!! error TS2459: Type 'number | { b12: number; b42: number; }' has no property 'b42' and no string index signature.
~
!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'c' must be of type 'number', but here has type '(number | { b12: number; b42: number; })[]'.

View file

@ -0,0 +1,9 @@
//// [destructuringVariableDeclarationAndAssignment.ts]
var {o: [a1, a2, a3 = { b1: 1000, b4: 200 }]} = { o: [1, 2, { b1: 4, b4: 0 }] };
var {o0: [c, d, { e: e1, f }, , ]} = { o0: [1, 2, { e: 4, f: 0 }] };
var {o1: [a11, a21, { b12: b22, b42 },, ...c]} = { o1: [1, 2, { b12: 4, b42: 0 }] };
//// [destructuringVariableDeclarationAndAssignment.js]
var _a = ({ o: [1, 2, { b1: 4, b4: 0 }] }).o, a1 = _a[0], a2 = _a[1], _b = _a[2], a3 = _b === void 0 ? { b1: 1000, b4: 200 } : _b;
var _c = ({ o0: [1, 2, { e: 4, f: 0 }] }).o0, c = _c[0], d = _c[1], _d = _c[2], e1 = _d.e, f = _d.f;
var _e = ({ o1: [1, 2, { b12: 4, b42: 0 }] }).o1, a11 = _e[0], a21 = _e[1], _f = _e[2], b22 = _f.b12, b42 = _f.b42, c = _e.slice(4);

View file

@ -0,0 +1,22 @@
var [p0,p1, p2] : any = [2, 3, 4];
var [a, b, c]: [number, number, string] = [1, 2, "string"];
var [d, e]: any = undefined;
var [f = false, g = 1]: any = undefined;
g = 10;
f = true;
var [x] = []
var [[[y]], [[[[z]]]]] = [[[]], [[[[]]]]]
var [[w], m]: [[string|number], boolean] = [[1], true];
interface J extends Array<Number> {
2: number;
}
var [, w1] = [1, 2, 3];
var [,,, w2] = [1, 2, 3, 4];
var [,,, w2] = [1, 2, 3, 4];
var [,,,...w3] = [1, 2, 3, 4, "hello"];
var [r, s, ...t] = [1, 2, "string"];
var [r1, s1, t1] = [1, 2, "string"];

View file

@ -0,0 +1,13 @@
function foo() {
return [1, 2, 3];
}
interface J extends Array<Number> {
2: number;
}
function bar(): J {
return <[number, number, number]>[1, 2, 3];
}
var [j, k] = foo();
var [...p] = foo();

View file

@ -0,0 +1,23 @@
interface H {
0: number,
1: string
}
interface J extends Array<Number> {
2: number;
}
function bar(): J {
return <[number, number, number]>[1, 2, 3];
}
function gg(idx: number) {
return {
[idx]: true
}
}
var [h, g, i]: H = [];
var [[[y]], [[[[z]]]]] = []
var [, , ...w4, , ] = []
var [a = "string", b, c] = bar();
var [r, s, t] = gg(1);

View file

@ -0,0 +1,12 @@
var c = 0;
var { a, } = { a:1, };
var { b: { c } } = { b: { c } };
var { b1: { c1 } = { c1: "string" } } = { b1: { c1: "world" } };
var { d1 }: any = undefined;
var { e1 }: any = {};
var { f: {f1} = { f1: "string" } }: any = {};
var { f2: {f21} = { f21: "string" } }: any = undefined;
var { e1: {e2} = { e2: "string" } }: any|{ e1: { e2 } } = undefined;
var { e2: {e3} = { e3: "string" } }: any|{ e2: { e3 } } = {};
var {g = 1}: any = { g: 100000 };
var {1: x} = { 1: "string" };

View file

@ -0,0 +1,46 @@
interface I {
j: number;
[str: string]: number;
}
interface J {
[str: string]: number;
}
function zz() {
return {
"cat": "dog",
}
}
function zz1(): J {
return {
"cat": 1,
}
}
function yy() {
return {}
}
var {j}: I| J = { j: 1000 };
var {cat} = zz();
var {"cat":cart} = zz();
var {can}: J = {};
var {can1}: J = zz1();
function f() {
var { z }: { z: number } = { z };
}
interface K {
[idx: number]: boolean
}
var {1: boo}: K = { 1: true };
var {1: boo1}: K = { };
function bar(): K {
return { };
}
var {1: baz} = bar();

View file

@ -0,0 +1,10 @@
var {h?} = { h?: 1 };
var {i}: string | number = { i: 2 };
var {i1}: string | number| {} = { i1: 2 };
var { f2: {f21} = { f212: "string" } }: any = undefined;
var { b1: { c1 } = { c1: "string" } } = { b1: { c1: c } };
var { d }: any;
var { ...d1 } = {
a: 1, b: 1, d1: 9, e: 10
}
var {1} = { 1 };

View file

@ -0,0 +1,23 @@
interface K {
[str: string]: string;
}
interface K1 {
k: string;
}
var {k}: K|K1 = { k: "string" };
function barn() {
return {};
}
var {2: baz1} = barn()
interface J {
[str: string]: number;
}
function zz() {
return {
"cat": "dog"
}
}
var {"can": can}: J = zz();

View file

@ -0,0 +1,3 @@
var {o: [a1, a2, a3 = { b1: 1000, b4: 200 }]} = { o: [1, 2, { b1: 4, b4: 0 }] };
var {o0: [c, d, { e: e1, f }, , ]} = { o0: [1, 2, { e: 4, f: 0 }] };
var {o1: [a11, a21, { b12: b22, b42 },, ...c]} = { o1: [1, 2, { b12: 4, b42: 0 }] };