Merge pull request #4598 from Microsoft/destructuringInitializers

Improved checking of destructuring with literal initializers
This commit is contained in:
Anders Hejlsberg
2015-09-11 09:12:45 -07:00
50 changed files with 1425 additions and 1247 deletions

View File

@@ -2,8 +2,8 @@ function f0() {
var [] = [1, "hello"];
var [x] = [1, "hello"];
var [x, y] = [1, "hello"];
var [x, y, z] = [1, "hello"]; // Error
var [,, z] = [0, 1, 2];
var [x, y, z] = [1, "hello"];
var [,, x] = [0, 1, 2];
var x: number;
var y: string;
}
@@ -19,14 +19,14 @@ function f1() {
}
function f2() {
var { } = { x: 5, y: "hello" };
var { x } = { x: 5, y: "hello" };
var { y } = { x: 5, y: "hello" };
var { } = { x: 5, y: "hello" }; // Error, no x and y in target
var { x } = { x: 5, y: "hello" }; // Error, no y in target
var { y } = { x: 5, y: "hello" }; // Error, no x in target
var { x, y } = { x: 5, y: "hello" };
var x: number;
var y: string;
var { x: a } = { x: 5, y: "hello" };
var { y: b } = { x: 5, y: "hello" };
var { x: a } = { x: 5, y: "hello" }; // Error, no y in target
var { y: b } = { x: 5, y: "hello" }; // Error, no x in target
var { x: a, y: b } = { x: 5, y: "hello" };
var a: number;
var b: string;

View File

@@ -0,0 +1,65 @@
// (arg: { x: any, y: any }) => void
function f1({ x, y }) { }
f1({ x: 1, y: 1 });
// (arg: { x: any, y?: number }) => void
function f2({ x, y = 0 }) { }
f2({ x: 1 });
f2({ x: 1, y: 1 });
// (arg: { x?: number, y?: number }) => void
function f3({ x = 0, y = 0 }) { }
f3({});
f3({ x: 1 });
f3({ y: 1 });
f3({ x: 1, y: 1 });
// (arg?: { x: number, y: number }) => void
function f4({ x, y } = { x: 0, y: 0 }) { }
f4();
f4({ x: 1, y: 1 });
// (arg?: { x: number, y?: number }) => void
function f5({ x, y = 0 } = { x: 0 }) { }
f5();
f5({ x: 1 });
f5({ x: 1, y: 1 });
// (arg?: { x?: number, y?: number }) => void
function f6({ x = 0, y = 0 } = {}) { }
f6();
f6({});
f6({ x: 1 });
f6({ y: 1 });
f6({ x: 1, y: 1 });
// (arg?: { a: { x?: number, y?: number } }) => void
function f7({ a: { x = 0, y = 0 } } = { a: {} }) { }
f7();
f7({ a: {} });
f7({ a: { x: 1 } });
f7({ a: { y: 1 } });
f7({ a: { x: 1, y: 1 } });
// (arg: [any, any]) => void
function g1([x, y]) { }
g1([1, 1]);
// (arg: [number, number]) => void
function g2([x = 0, y = 0]) { }
g2([1, 1]);
// (arg?: [number, number]) => void
function g3([x, y] = [0, 0]) { }
g3();
g3([1, 1]);
// (arg?: [number, number]) => void
function g4([x, y = 0] = [0]) { }
g4();
g4([1, 1]);
// (arg?: [number, number]) => void
function g5([x = 0, y = 0] = []) { }
g5();
g5([1, 1]);

View File

@@ -0,0 +1,33 @@
// Missing properties
function f1() {
var { x, y } = {};
var { x = 1, y } = {};
var { x, y = 1 } = {};
var { x = 1, y = 1 } = {};
}
// Missing properties
function f2() {
var x: number, y: number;
({ x, y } = {});
({ x: x = 1, y } = {});
({ x, y: y = 1 } = {});
({ x: x = 1, y: y = 1 } = {});
}
// Excess properties
function f3() {
var { } = { x: 0, y: 0 };
var { x } = { x: 0, y: 0 };
var { y } = { x: 0, y: 0 };
var { x, y } = { x: 0, y: 0 };
}
// Excess properties
function f4() {
var x: number, y: number;
({ } = { x: 0, y: 0 });
({ x } = { x: 0, y: 0 });
({ y } = { x: 0, y: 0 });
({ x, y } = { x: 0, y: 0 });
}