mirror of
https://github.com/swc-project/swc.git
synced 2024-12-21 12:41:54 +03:00
107 lines
2.3 KiB
JavaScript
107 lines
2.3 KiB
JavaScript
// @downlevelIteration: true
|
|
/* AssignmentPattern:
|
|
* ObjectAssignmentPattern
|
|
* ArrayAssignmentPattern
|
|
* ArrayAssignmentPattern:
|
|
* [Elision<opt> AssignmentRestElementopt ]
|
|
* [AssignmentElementList]
|
|
* [AssignmentElementList, Elision<opt> AssignmentRestElementopt ]
|
|
* AssignmentElementList:
|
|
* Elision<opt> AssignmentElement
|
|
* AssignmentElementList, Elisionopt AssignmentElement
|
|
* AssignmentElement:
|
|
* LeftHandSideExpression Initialiseropt
|
|
* AssignmentPattern Initialiseropt
|
|
* AssignmentRestElement:
|
|
* ... LeftHandSideExpression
|
|
*/ // In a destructuring assignment expression, the type of the expression on the right must be assignable to the assignment target on the left.
|
|
// An expression of type S is considered assignable to an assignment target V if one of the following is true
|
|
// 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] = undefined;
|
|
var [a2 = false, a3 = 1] = undefined;
|
|
// 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 a tuple- like type (section 3.3.3) with a property named N of a type that is assignable to the target given in E,
|
|
// where N is the numeric index of E in the array assignment pattern, or
|
|
var [b0, b1, b2] = [
|
|
2,
|
|
3,
|
|
4
|
|
];
|
|
var [b3, b4, b5] = [
|
|
1,
|
|
2,
|
|
"string"
|
|
];
|
|
function foo() {
|
|
return [
|
|
1,
|
|
2,
|
|
3
|
|
];
|
|
}
|
|
var [b6, b7] = foo();
|
|
var [...b8] = foo();
|
|
// S is not a tuple- like type and the numeric index signature type of S is assignable to the target given in E.
|
|
var temp = [
|
|
1,
|
|
2,
|
|
3
|
|
];
|
|
var [c0, c1] = [
|
|
...temp
|
|
];
|
|
var [c2] = [];
|
|
var [[[c3]], [[[[c4]]]]] = [
|
|
[
|
|
[]
|
|
],
|
|
[
|
|
[
|
|
[
|
|
[]
|
|
]
|
|
]
|
|
]
|
|
];
|
|
var [[c5], c6] = [
|
|
[
|
|
1
|
|
],
|
|
true
|
|
];
|
|
var [, c7] = [
|
|
1,
|
|
2,
|
|
3
|
|
];
|
|
var [, , , c8] = [
|
|
1,
|
|
2,
|
|
3,
|
|
4
|
|
];
|
|
var [, , , c9] = [
|
|
1,
|
|
2,
|
|
3,
|
|
4
|
|
];
|
|
var [, , , ...c10] = [
|
|
1,
|
|
2,
|
|
3,
|
|
4,
|
|
"hello"
|
|
];
|
|
var [c11, c12, ...c13] = [
|
|
1,
|
|
2,
|
|
"string"
|
|
];
|
|
var [c14, c15, c16] = [
|
|
1,
|
|
2,
|
|
"string"
|
|
];
|