Skip to content

Commit 51b752b

Browse files
committed
make it work with AssignmentRestElement
1 parent 090326b commit 51b752b

File tree

7 files changed

+32
-25
lines changed

7 files changed

+32
-25
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21066,7 +21066,7 @@ namespace ts {
2106621066
else {
2106721067
checkGrammarForDisallowedTrailingComma(node.elements, Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma);
2106821068
const type = isTupleType(sourceType) ?
21069-
getArrayLiteralType((sourceType.typeArguments || emptyArray).slice(elementIndex, getTypeReferenceArity(sourceType))) :
21069+
sliceTupleType(sourceType, elementIndex) :
2107021070
createArrayType(elementType);
2107121071
return checkDestructuringAssignment(restExpression, type, checkMode);
2107221072
}

tests/baselines/reference/destructuringTuple.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,13 @@
22
declare var tuple: [boolean, number, ...string[]];
33

44
const [a, b, c, ...rest] = tuple;
5+
6+
declare var receiver: typeof tuple;
7+
8+
[...receiver] = tuple;
59

610

711
//// [destructuringTuple.js]
812
"use strict";
913
var a = tuple[0], b = tuple[1], c = tuple[2], rest = tuple.slice(3);
14+
receiver = tuple.slice(0);

tests/baselines/reference/destructuringTuple.symbols

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,11 @@ const [a, b, c, ...rest] = tuple;
99
>rest : Symbol(rest, Decl(destructuringTuple.ts, 2, 15))
1010
>tuple : Symbol(tuple, Decl(destructuringTuple.ts, 0, 11))
1111

12+
declare var receiver: typeof tuple;
13+
>receiver : Symbol(receiver, Decl(destructuringTuple.ts, 4, 11))
14+
>tuple : Symbol(tuple, Decl(destructuringTuple.ts, 0, 11))
15+
16+
[...receiver] = tuple;
17+
>receiver : Symbol(receiver, Decl(destructuringTuple.ts, 4, 11))
18+
>tuple : Symbol(tuple, Decl(destructuringTuple.ts, 0, 11))
19+

tests/baselines/reference/destructuringTuple.types

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,14 @@ const [a, b, c, ...rest] = tuple;
99
>rest : string[]
1010
>tuple : [boolean, number, ...string[]]
1111

12+
declare var receiver: typeof tuple;
13+
>receiver : [boolean, number, ...string[]]
14+
>tuple : [boolean, number, ...string[]]
15+
16+
[...receiver] = tuple;
17+
>[...receiver] = tuple : [boolean, number, ...string[]]
18+
>[...receiver] : (string | number | boolean)[]
19+
>...receiver : string | number | boolean
20+
>receiver : [boolean, number, ...string[]]
21+
>tuple : [boolean, number, ...string[]]
22+

tests/baselines/reference/restElementWithAssignmentPattern3.errors.txt

Lines changed: 0 additions & 16 deletions
This file was deleted.
Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
1-
tests/cases/conformance/es6/destructuring/restElementWithAssignmentPattern4.ts(3,10): error TS2322: Type 'string | number' is not assignable to type 'string'.
2-
Type 'number' is not assignable to type 'string'.
3-
tests/cases/conformance/es6/destructuring/restElementWithAssignmentPattern4.ts(3,18): error TS2459: Type '(string | number)[]' has no property 'b' and no string index signature.
1+
tests/cases/conformance/es6/destructuring/restElementWithAssignmentPattern4.ts(3,18): error TS2459: Type '[string, number]' has no property 'b' and no string index signature.
42

53

6-
==== tests/cases/conformance/es6/destructuring/restElementWithAssignmentPattern4.ts (2 errors) ====
4+
==== tests/cases/conformance/es6/destructuring/restElementWithAssignmentPattern4.ts (1 errors) ====
75
var a: string, b: number;
86
var tuple: [string, number] = ["", 1];
97
[...{ 0: a = "", b }] = tuple;
10-
~
11-
!!! error TS2322: Type 'string | number' is not assignable to type 'string'.
12-
!!! error TS2322: Type 'number' is not assignable to type 'string'.
138
~
14-
!!! error TS2459: Type '(string | number)[]' has no property 'b' and no string index signature.
9+
!!! error TS2459: Type '[string, number]' has no property 'b' and no string index signature.

tests/cases/compiler/destructuringTuple.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,7 @@
33
declare var tuple: [boolean, number, ...string[]];
44

55
const [a, b, c, ...rest] = tuple;
6+
7+
declare var receiver: typeof tuple;
8+
9+
[...receiver] = tuple;

0 commit comments

Comments
 (0)