Skip to content

Commit 00c5071

Browse files
committed
Accept new baselines
1 parent 48c0aed commit 00c5071

File tree

3 files changed

+297
-0
lines changed

3 files changed

+297
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
//// [genericObjectRest.ts]
2+
const a = 'a';
3+
4+
function f1<T extends { a: string, b: number }>(obj: T) {
5+
let { ...r0 } = obj;
6+
let { a: a1, ...r1 } = obj;
7+
let { a: a2, b: b2, ...r2 } = obj;
8+
let { 'a': a3, ...r3 } = obj;
9+
let { ['a']: a4, ...r4 } = obj;
10+
let { [a]: a5, ...r5 } = obj;
11+
}
12+
13+
const sa = Symbol();
14+
const sb = Symbol();
15+
16+
function f2<T extends { [sa]: string, [sb]: number }>(obj: T) {
17+
let { [sa]: a1, [sb]: b1, ...r1 } = obj;
18+
}
19+
20+
function f3<T, K1 extends keyof T, K2 extends keyof T>(obj: T, k1: K1, k2: K2) {
21+
let { [k1]: a1, [k2]: a2, ...r1 } = obj;
22+
}
23+
24+
type Item = { a: string, b: number, c: boolean };
25+
26+
function f4<K1 extends keyof Item, K2 extends keyof Item>(obj: Item, k1: K1, k2: K2) {
27+
let { [k1]: a1, [k2]: a2, ...r1 } = obj;
28+
}
29+
30+
31+
//// [genericObjectRest.js]
32+
"use strict";
33+
var __rest = (this && this.__rest) || function (s, e) {
34+
var t = {};
35+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
36+
t[p] = s[p];
37+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
38+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
39+
t[p[i]] = s[p[i]];
40+
return t;
41+
};
42+
const a = 'a';
43+
function f1(obj) {
44+
let r0 = __rest(obj, []);
45+
let { a: a1 } = obj, r1 = __rest(obj, ["a"]);
46+
let { a: a2, b: b2 } = obj, r2 = __rest(obj, ["a", "b"]);
47+
let { 'a': a3 } = obj, r3 = __rest(obj, ['a']);
48+
let { ['a']: a4 } = obj, r4 = __rest(obj, ['a']);
49+
let _a = a, a5 = obj[_a], r5 = __rest(obj, [typeof _a === "symbol" ? _a : _a + ""]);
50+
}
51+
const sa = Symbol();
52+
const sb = Symbol();
53+
function f2(obj) {
54+
let _a = sa, a1 = obj[_a], _b = sb, b1 = obj[_b], r1 = __rest(obj, [typeof _a === "symbol" ? _a : _a + "", typeof _b === "symbol" ? _b : _b + ""]);
55+
}
56+
function f3(obj, k1, k2) {
57+
let _a = k1, a1 = obj[_a], _b = k2, a2 = obj[_b], r1 = __rest(obj, [typeof _a === "symbol" ? _a : _a + "", typeof _b === "symbol" ? _b : _b + ""]);
58+
}
59+
function f4(obj, k1, k2) {
60+
let _a = k1, a1 = obj[_a], _b = k2, a2 = obj[_b], r1 = __rest(obj, [typeof _a === "symbol" ? _a : _a + "", typeof _b === "symbol" ? _b : _b + ""]);
61+
}
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
=== tests/cases/conformance/types/rest/genericObjectRest.ts ===
2+
const a = 'a';
3+
>a : Symbol(a, Decl(genericObjectRest.ts, 0, 5))
4+
5+
function f1<T extends { a: string, b: number }>(obj: T) {
6+
>f1 : Symbol(f1, Decl(genericObjectRest.ts, 0, 14))
7+
>T : Symbol(T, Decl(genericObjectRest.ts, 2, 12))
8+
>a : Symbol(a, Decl(genericObjectRest.ts, 2, 23))
9+
>b : Symbol(b, Decl(genericObjectRest.ts, 2, 34))
10+
>obj : Symbol(obj, Decl(genericObjectRest.ts, 2, 48))
11+
>T : Symbol(T, Decl(genericObjectRest.ts, 2, 12))
12+
13+
let { ...r0 } = obj;
14+
>r0 : Symbol(r0, Decl(genericObjectRest.ts, 3, 9))
15+
>obj : Symbol(obj, Decl(genericObjectRest.ts, 2, 48))
16+
17+
let { a: a1, ...r1 } = obj;
18+
>a : Symbol(a, Decl(genericObjectRest.ts, 2, 23))
19+
>a1 : Symbol(a1, Decl(genericObjectRest.ts, 4, 9))
20+
>r1 : Symbol(r1, Decl(genericObjectRest.ts, 4, 16))
21+
>obj : Symbol(obj, Decl(genericObjectRest.ts, 2, 48))
22+
23+
let { a: a2, b: b2, ...r2 } = obj;
24+
>a : Symbol(a, Decl(genericObjectRest.ts, 2, 23))
25+
>a2 : Symbol(a2, Decl(genericObjectRest.ts, 5, 9))
26+
>b : Symbol(b, Decl(genericObjectRest.ts, 2, 34))
27+
>b2 : Symbol(b2, Decl(genericObjectRest.ts, 5, 16))
28+
>r2 : Symbol(r2, Decl(genericObjectRest.ts, 5, 23))
29+
>obj : Symbol(obj, Decl(genericObjectRest.ts, 2, 48))
30+
31+
let { 'a': a3, ...r3 } = obj;
32+
>a3 : Symbol(a3, Decl(genericObjectRest.ts, 6, 9))
33+
>r3 : Symbol(r3, Decl(genericObjectRest.ts, 6, 18))
34+
>obj : Symbol(obj, Decl(genericObjectRest.ts, 2, 48))
35+
36+
let { ['a']: a4, ...r4 } = obj;
37+
>'a' : Symbol(a4, Decl(genericObjectRest.ts, 7, 9))
38+
>a4 : Symbol(a4, Decl(genericObjectRest.ts, 7, 9))
39+
>r4 : Symbol(r4, Decl(genericObjectRest.ts, 7, 20))
40+
>obj : Symbol(obj, Decl(genericObjectRest.ts, 2, 48))
41+
42+
let { [a]: a5, ...r5 } = obj;
43+
>a : Symbol(a, Decl(genericObjectRest.ts, 0, 5))
44+
>a5 : Symbol(a5, Decl(genericObjectRest.ts, 8, 9))
45+
>r5 : Symbol(r5, Decl(genericObjectRest.ts, 8, 18))
46+
>obj : Symbol(obj, Decl(genericObjectRest.ts, 2, 48))
47+
}
48+
49+
const sa = Symbol();
50+
>sa : Symbol(sa, Decl(genericObjectRest.ts, 11, 5))
51+
>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
52+
53+
const sb = Symbol();
54+
>sb : Symbol(sb, Decl(genericObjectRest.ts, 12, 5))
55+
>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
56+
57+
function f2<T extends { [sa]: string, [sb]: number }>(obj: T) {
58+
>f2 : Symbol(f2, Decl(genericObjectRest.ts, 12, 20))
59+
>T : Symbol(T, Decl(genericObjectRest.ts, 14, 12))
60+
>[sa] : Symbol([sa], Decl(genericObjectRest.ts, 14, 23))
61+
>sa : Symbol(sa, Decl(genericObjectRest.ts, 11, 5))
62+
>[sb] : Symbol([sb], Decl(genericObjectRest.ts, 14, 37))
63+
>sb : Symbol(sb, Decl(genericObjectRest.ts, 12, 5))
64+
>obj : Symbol(obj, Decl(genericObjectRest.ts, 14, 54))
65+
>T : Symbol(T, Decl(genericObjectRest.ts, 14, 12))
66+
67+
let { [sa]: a1, [sb]: b1, ...r1 } = obj;
68+
>sa : Symbol(sa, Decl(genericObjectRest.ts, 11, 5))
69+
>a1 : Symbol(a1, Decl(genericObjectRest.ts, 15, 9))
70+
>sb : Symbol(sb, Decl(genericObjectRest.ts, 12, 5))
71+
>b1 : Symbol(b1, Decl(genericObjectRest.ts, 15, 19))
72+
>r1 : Symbol(r1, Decl(genericObjectRest.ts, 15, 29))
73+
>obj : Symbol(obj, Decl(genericObjectRest.ts, 14, 54))
74+
}
75+
76+
function f3<T, K1 extends keyof T, K2 extends keyof T>(obj: T, k1: K1, k2: K2) {
77+
>f3 : Symbol(f3, Decl(genericObjectRest.ts, 16, 1))
78+
>T : Symbol(T, Decl(genericObjectRest.ts, 18, 12))
79+
>K1 : Symbol(K1, Decl(genericObjectRest.ts, 18, 14))
80+
>T : Symbol(T, Decl(genericObjectRest.ts, 18, 12))
81+
>K2 : Symbol(K2, Decl(genericObjectRest.ts, 18, 34))
82+
>T : Symbol(T, Decl(genericObjectRest.ts, 18, 12))
83+
>obj : Symbol(obj, Decl(genericObjectRest.ts, 18, 55))
84+
>T : Symbol(T, Decl(genericObjectRest.ts, 18, 12))
85+
>k1 : Symbol(k1, Decl(genericObjectRest.ts, 18, 62))
86+
>K1 : Symbol(K1, Decl(genericObjectRest.ts, 18, 14))
87+
>k2 : Symbol(k2, Decl(genericObjectRest.ts, 18, 70))
88+
>K2 : Symbol(K2, Decl(genericObjectRest.ts, 18, 34))
89+
90+
let { [k1]: a1, [k2]: a2, ...r1 } = obj;
91+
>k1 : Symbol(k1, Decl(genericObjectRest.ts, 18, 62))
92+
>a1 : Symbol(a1, Decl(genericObjectRest.ts, 19, 9))
93+
>k2 : Symbol(k2, Decl(genericObjectRest.ts, 18, 70))
94+
>a2 : Symbol(a2, Decl(genericObjectRest.ts, 19, 19))
95+
>r1 : Symbol(r1, Decl(genericObjectRest.ts, 19, 29))
96+
>obj : Symbol(obj, Decl(genericObjectRest.ts, 18, 55))
97+
}
98+
99+
type Item = { a: string, b: number, c: boolean };
100+
>Item : Symbol(Item, Decl(genericObjectRest.ts, 20, 1))
101+
>a : Symbol(a, Decl(genericObjectRest.ts, 22, 13))
102+
>b : Symbol(b, Decl(genericObjectRest.ts, 22, 24))
103+
>c : Symbol(c, Decl(genericObjectRest.ts, 22, 35))
104+
105+
function f4<K1 extends keyof Item, K2 extends keyof Item>(obj: Item, k1: K1, k2: K2) {
106+
>f4 : Symbol(f4, Decl(genericObjectRest.ts, 22, 49))
107+
>K1 : Symbol(K1, Decl(genericObjectRest.ts, 24, 12))
108+
>Item : Symbol(Item, Decl(genericObjectRest.ts, 20, 1))
109+
>K2 : Symbol(K2, Decl(genericObjectRest.ts, 24, 34))
110+
>Item : Symbol(Item, Decl(genericObjectRest.ts, 20, 1))
111+
>obj : Symbol(obj, Decl(genericObjectRest.ts, 24, 58))
112+
>Item : Symbol(Item, Decl(genericObjectRest.ts, 20, 1))
113+
>k1 : Symbol(k1, Decl(genericObjectRest.ts, 24, 68))
114+
>K1 : Symbol(K1, Decl(genericObjectRest.ts, 24, 12))
115+
>k2 : Symbol(k2, Decl(genericObjectRest.ts, 24, 76))
116+
>K2 : Symbol(K2, Decl(genericObjectRest.ts, 24, 34))
117+
118+
let { [k1]: a1, [k2]: a2, ...r1 } = obj;
119+
>k1 : Symbol(k1, Decl(genericObjectRest.ts, 24, 68))
120+
>a1 : Symbol(a1, Decl(genericObjectRest.ts, 25, 9))
121+
>k2 : Symbol(k2, Decl(genericObjectRest.ts, 24, 76))
122+
>a2 : Symbol(a2, Decl(genericObjectRest.ts, 25, 19))
123+
>r1 : Symbol(r1, Decl(genericObjectRest.ts, 25, 29))
124+
>obj : Symbol(obj, Decl(genericObjectRest.ts, 24, 58))
125+
}
126+
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
=== tests/cases/conformance/types/rest/genericObjectRest.ts ===
2+
const a = 'a';
3+
>a : "a"
4+
>'a' : "a"
5+
6+
function f1<T extends { a: string, b: number }>(obj: T) {
7+
>f1 : <T extends { a: string; b: number; }>(obj: T) => void
8+
>a : string
9+
>b : number
10+
>obj : T
11+
12+
let { ...r0 } = obj;
13+
>r0 : T
14+
>obj : T
15+
16+
let { a: a1, ...r1 } = obj;
17+
>a : any
18+
>a1 : string
19+
>r1 : Pick<T, Exclude<keyof T, "a">>
20+
>obj : T
21+
22+
let { a: a2, b: b2, ...r2 } = obj;
23+
>a : any
24+
>a2 : string
25+
>b : any
26+
>b2 : number
27+
>r2 : Pick<T, Exclude<keyof T, "a" | "b">>
28+
>obj : T
29+
30+
let { 'a': a3, ...r3 } = obj;
31+
>a3 : string
32+
>r3 : Pick<T, Exclude<keyof T, "a">>
33+
>obj : T
34+
35+
let { ['a']: a4, ...r4 } = obj;
36+
>'a' : "a"
37+
>a4 : string
38+
>r4 : Pick<T, Exclude<keyof T, "a">>
39+
>obj : T
40+
41+
let { [a]: a5, ...r5 } = obj;
42+
>a : "a"
43+
>a5 : string
44+
>r5 : Pick<T, Exclude<keyof T, "a">>
45+
>obj : T
46+
}
47+
48+
const sa = Symbol();
49+
>sa : unique symbol
50+
>Symbol() : unique symbol
51+
>Symbol : SymbolConstructor
52+
53+
const sb = Symbol();
54+
>sb : unique symbol
55+
>Symbol() : unique symbol
56+
>Symbol : SymbolConstructor
57+
58+
function f2<T extends { [sa]: string, [sb]: number }>(obj: T) {
59+
>f2 : <T extends { [sa]: string; [sb]: number; }>(obj: T) => void
60+
>[sa] : string
61+
>sa : unique symbol
62+
>[sb] : number
63+
>sb : unique symbol
64+
>obj : T
65+
66+
let { [sa]: a1, [sb]: b1, ...r1 } = obj;
67+
>sa : unique symbol
68+
>a1 : string
69+
>sb : unique symbol
70+
>b1 : number
71+
>r1 : Pick<T, Exclude<keyof T, unique symbol | unique symbol>>
72+
>obj : T
73+
}
74+
75+
function f3<T, K1 extends keyof T, K2 extends keyof T>(obj: T, k1: K1, k2: K2) {
76+
>f3 : <T, K1 extends keyof T, K2 extends keyof T>(obj: T, k1: K1, k2: K2) => void
77+
>obj : T
78+
>k1 : K1
79+
>k2 : K2
80+
81+
let { [k1]: a1, [k2]: a2, ...r1 } = obj;
82+
>k1 : K1
83+
>a1 : T[K1]
84+
>k2 : K2
85+
>a2 : T[K2]
86+
>r1 : Pick<T, Exclude<keyof T, K1 | K2>>
87+
>obj : T
88+
}
89+
90+
type Item = { a: string, b: number, c: boolean };
91+
>Item : Item
92+
>a : string
93+
>b : number
94+
>c : boolean
95+
96+
function f4<K1 extends keyof Item, K2 extends keyof Item>(obj: Item, k1: K1, k2: K2) {
97+
>f4 : <K1 extends "a" | "b" | "c", K2 extends "a" | "b" | "c">(obj: Item, k1: K1, k2: K2) => void
98+
>obj : Item
99+
>k1 : K1
100+
>k2 : K2
101+
102+
let { [k1]: a1, [k2]: a2, ...r1 } = obj;
103+
>k1 : K1
104+
>a1 : Item[K1]
105+
>k2 : K2
106+
>a2 : Item[K2]
107+
>r1 : Pick<Item, Exclude<"a", K1 | K2> | Exclude<"b", K1 | K2> | Exclude<"c", K1 | K2>>
108+
>obj : Item
109+
}
110+

0 commit comments

Comments
 (0)