Skip to content

Commit 0df7ba0

Browse files
authored
Merge pull request microsoft#13392 from Microsoft/rest-types-skip-class-methods
Object rest skips only class methods
2 parents d7160c7 + 945e65f commit 0df7ba0

File tree

5 files changed

+91
-32
lines changed

5 files changed

+91
-32
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3125,9 +3125,8 @@ namespace ts {
31253125
for (const prop of getPropertiesOfType(source)) {
31263126
const inNamesToRemove = prop.name in names;
31273127
const isPrivate = getDeclarationModifierFlagsFromSymbol(prop) & (ModifierFlags.Private | ModifierFlags.Protected);
3128-
const isMethod = prop.flags & SymbolFlags.Method;
31293128
const isSetOnlyAccessor = prop.flags & SymbolFlags.SetAccessor && !(prop.flags & SymbolFlags.GetAccessor);
3130-
if (!inNamesToRemove && !isPrivate && !isMethod && !isSetOnlyAccessor) {
3129+
if (!inNamesToRemove && !isPrivate && !isClassMethod(prop) && !isSetOnlyAccessor) {
31313130
members[prop.name] = prop;
31323131
}
31333132
}

tests/baselines/reference/objectRest.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,15 @@ class Removable {
2929
removed: string;
3030
remainder: string;
3131
}
32+
interface I {
33+
m(): void;
34+
removed: string;
35+
remainder: string;
36+
}
3237
var removable = new Removable();
3338
var { removed, ...removableRest } = removable;
39+
var i: I = removable;
40+
var { removed, ...removableRest2 } = i;
3441

3542
let computed = 'b';
3643
let computed2 = 'a';
@@ -74,6 +81,8 @@ class Removable {
7481
}
7582
var removable = new Removable();
7683
var { removed } = removable, removableRest = __rest(removable, ["removed"]);
84+
var i = removable;
85+
var { removed } = i, removableRest2 = __rest(i, ["removed"]);
7786
let computed = 'b';
7887
let computed2 = 'a';
7988
var _g = computed, stillNotGreat = o[_g], _h = computed2, soSo = o[_h], o = __rest(o, [typeof _g === "symbol" ? _g : _g + "", typeof _h === "symbol" ? _h : _h + ""]);

tests/baselines/reference/objectRest.symbols

Lines changed: 52 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,42 @@
11
=== tests/cases/conformance/types/rest/objectRest.ts ===
22
var o = { a: 1, b: 'no' }
3-
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 35, 51))
3+
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 42, 51))
44
>a : Symbol(a, Decl(objectRest.ts, 0, 9))
55
>b : Symbol(b, Decl(objectRest.ts, 0, 15))
66

77
var { ...clone } = o;
88
>clone : Symbol(clone, Decl(objectRest.ts, 1, 5))
9-
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 35, 51))
9+
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 42, 51))
1010

1111
var { a, ...justB } = o;
1212
>a : Symbol(a, Decl(objectRest.ts, 2, 5), Decl(objectRest.ts, 3, 5))
1313
>justB : Symbol(justB, Decl(objectRest.ts, 2, 8))
14-
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 35, 51))
14+
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 42, 51))
1515

1616
var { a, b: renamed, ...empty } = o;
1717
>a : Symbol(a, Decl(objectRest.ts, 2, 5), Decl(objectRest.ts, 3, 5))
1818
>b : Symbol(b, Decl(objectRest.ts, 0, 15))
1919
>renamed : Symbol(renamed, Decl(objectRest.ts, 3, 8), Decl(objectRest.ts, 4, 5), Decl(objectRest.ts, 5, 5), Decl(objectRest.ts, 9, 5))
2020
>empty : Symbol(empty, Decl(objectRest.ts, 3, 20))
21-
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 35, 51))
21+
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 42, 51))
2222

2323
var { ['b']: renamed, ...justA } = o;
2424
>'b' : Symbol(renamed, Decl(objectRest.ts, 3, 8), Decl(objectRest.ts, 4, 5), Decl(objectRest.ts, 5, 5), Decl(objectRest.ts, 9, 5))
2525
>renamed : Symbol(renamed, Decl(objectRest.ts, 3, 8), Decl(objectRest.ts, 4, 5), Decl(objectRest.ts, 5, 5), Decl(objectRest.ts, 9, 5))
2626
>justA : Symbol(justA, Decl(objectRest.ts, 4, 21), Decl(objectRest.ts, 5, 19), Decl(objectRest.ts, 6, 31))
27-
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 35, 51))
27+
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 42, 51))
2828

2929
var { 'b': renamed, ...justA } = o;
3030
>renamed : Symbol(renamed, Decl(objectRest.ts, 3, 8), Decl(objectRest.ts, 4, 5), Decl(objectRest.ts, 5, 5), Decl(objectRest.ts, 9, 5))
3131
>justA : Symbol(justA, Decl(objectRest.ts, 4, 21), Decl(objectRest.ts, 5, 19), Decl(objectRest.ts, 6, 31))
32-
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 35, 51))
32+
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 42, 51))
3333

3434
var { b: { '0': n, '1': oooo }, ...justA } = o;
3535
>b : Symbol(b, Decl(objectRest.ts, 0, 15))
3636
>n : Symbol(n, Decl(objectRest.ts, 6, 10))
3737
>oooo : Symbol(oooo, Decl(objectRest.ts, 6, 18))
3838
>justA : Symbol(justA, Decl(objectRest.ts, 4, 21), Decl(objectRest.ts, 5, 19), Decl(objectRest.ts, 6, 31))
39-
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 35, 51))
39+
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 42, 51))
4040

4141
let o2 = { c: 'terrible idea?', d: 'yes' };
4242
>o2 : Symbol(o2, Decl(objectRest.ts, 8, 3))
@@ -138,41 +138,63 @@ class Removable {
138138
remainder: string;
139139
>remainder : Symbol(Removable.remainder, Decl(objectRest.ts, 27, 20))
140140
}
141+
interface I {
142+
>I : Symbol(I, Decl(objectRest.ts, 29, 1))
143+
144+
m(): void;
145+
>m : Symbol(I.m, Decl(objectRest.ts, 30, 13))
146+
147+
removed: string;
148+
>removed : Symbol(I.removed, Decl(objectRest.ts, 31, 14))
149+
150+
remainder: string;
151+
>remainder : Symbol(I.remainder, Decl(objectRest.ts, 32, 20))
152+
}
141153
var removable = new Removable();
142-
>removable : Symbol(removable, Decl(objectRest.ts, 30, 3))
154+
>removable : Symbol(removable, Decl(objectRest.ts, 35, 3))
143155
>Removable : Symbol(Removable, Decl(objectRest.ts, 18, 35))
144156

145157
var { removed, ...removableRest } = removable;
146-
>removed : Symbol(removed, Decl(objectRest.ts, 31, 5))
147-
>removableRest : Symbol(removableRest, Decl(objectRest.ts, 31, 14))
148-
>removable : Symbol(removable, Decl(objectRest.ts, 30, 3))
158+
>removed : Symbol(removed, Decl(objectRest.ts, 36, 5), Decl(objectRest.ts, 38, 5))
159+
>removableRest : Symbol(removableRest, Decl(objectRest.ts, 36, 14))
160+
>removable : Symbol(removable, Decl(objectRest.ts, 35, 3))
161+
162+
var i: I = removable;
163+
>i : Symbol(i, Decl(objectRest.ts, 37, 3))
164+
>I : Symbol(I, Decl(objectRest.ts, 29, 1))
165+
>removable : Symbol(removable, Decl(objectRest.ts, 35, 3))
166+
167+
var { removed, ...removableRest2 } = i;
168+
>removed : Symbol(removed, Decl(objectRest.ts, 36, 5), Decl(objectRest.ts, 38, 5))
169+
>removableRest2 : Symbol(removableRest2, Decl(objectRest.ts, 38, 14))
170+
>i : Symbol(i, Decl(objectRest.ts, 37, 3))
149171

150172
let computed = 'b';
151-
>computed : Symbol(computed, Decl(objectRest.ts, 33, 3))
173+
>computed : Symbol(computed, Decl(objectRest.ts, 40, 3))
152174

153175
let computed2 = 'a';
154-
>computed2 : Symbol(computed2, Decl(objectRest.ts, 34, 3))
176+
>computed2 : Symbol(computed2, Decl(objectRest.ts, 41, 3))
155177

156178
var { [computed]: stillNotGreat, [computed2]: soSo, ...o } = o;
157-
>computed : Symbol(computed, Decl(objectRest.ts, 33, 3))
158-
>stillNotGreat : Symbol(stillNotGreat, Decl(objectRest.ts, 35, 5))
159-
>computed2 : Symbol(computed2, Decl(objectRest.ts, 34, 3))
160-
>soSo : Symbol(soSo, Decl(objectRest.ts, 35, 32))
161-
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 35, 51))
162-
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 35, 51))
179+
>computed : Symbol(computed, Decl(objectRest.ts, 40, 3))
180+
>stillNotGreat : Symbol(stillNotGreat, Decl(objectRest.ts, 42, 5))
181+
>computed2 : Symbol(computed2, Decl(objectRest.ts, 41, 3))
182+
>soSo : Symbol(soSo, Decl(objectRest.ts, 42, 32))
183+
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 42, 51))
184+
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 42, 51))
163185

164186
({ [computed]: stillNotGreat, [computed2]: soSo, ...o } = o);
165-
>computed : Symbol(computed, Decl(objectRest.ts, 33, 3))
166-
>stillNotGreat : Symbol(stillNotGreat, Decl(objectRest.ts, 35, 5))
167-
>computed2 : Symbol(computed2, Decl(objectRest.ts, 34, 3))
168-
>soSo : Symbol(soSo, Decl(objectRest.ts, 35, 32))
169-
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 35, 51))
170-
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 35, 51))
187+
>computed : Symbol(computed, Decl(objectRest.ts, 40, 3))
188+
>stillNotGreat : Symbol(stillNotGreat, Decl(objectRest.ts, 42, 5))
189+
>computed2 : Symbol(computed2, Decl(objectRest.ts, 41, 3))
190+
>soSo : Symbol(soSo, Decl(objectRest.ts, 42, 32))
191+
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 42, 51))
192+
>o : Symbol(o, Decl(objectRest.ts, 0, 3), Decl(objectRest.ts, 42, 51))
171193

172194
var noContextualType = ({ aNumber = 12, ...notEmptyObject }) => aNumber + notEmptyObject['anythingGoes'];
173-
>noContextualType : Symbol(noContextualType, Decl(objectRest.ts, 38, 3))
174-
>aNumber : Symbol(aNumber, Decl(objectRest.ts, 38, 25))
175-
>notEmptyObject : Symbol(notEmptyObject, Decl(objectRest.ts, 38, 39))
176-
>aNumber : Symbol(aNumber, Decl(objectRest.ts, 38, 25))
177-
>notEmptyObject : Symbol(notEmptyObject, Decl(objectRest.ts, 38, 39))
195+
>noContextualType : Symbol(noContextualType, Decl(objectRest.ts, 45, 3))
196+
>aNumber : Symbol(aNumber, Decl(objectRest.ts, 45, 25))
197+
>notEmptyObject : Symbol(notEmptyObject, Decl(objectRest.ts, 45, 39))
198+
>aNumber : Symbol(aNumber, Decl(objectRest.ts, 45, 25))
199+
>notEmptyObject : Symbol(notEmptyObject, Decl(objectRest.ts, 45, 39))
178200

tests/baselines/reference/objectRest.types

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,18 @@ class Removable {
158158
remainder: string;
159159
>remainder : string
160160
}
161+
interface I {
162+
>I : I
163+
164+
m(): void;
165+
>m : () => void
166+
167+
removed: string;
168+
>removed : string
169+
170+
remainder: string;
171+
>remainder : string
172+
}
161173
var removable = new Removable();
162174
>removable : Removable
163175
>new Removable() : Removable
@@ -168,6 +180,16 @@ var { removed, ...removableRest } = removable;
168180
>removableRest : { both: number; remainder: string; }
169181
>removable : Removable
170182

183+
var i: I = removable;
184+
>i : I
185+
>I : I
186+
>removable : Removable
187+
188+
var { removed, ...removableRest2 } = i;
189+
>removed : string
190+
>removableRest2 : { m(): void; remainder: string; }
191+
>i : I
192+
171193
let computed = 'b';
172194
>computed : string
173195
>'b' : "b"

tests/cases/conformance/types/rest/objectRest.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,15 @@ class Removable {
2929
removed: string;
3030
remainder: string;
3131
}
32+
interface I {
33+
m(): void;
34+
removed: string;
35+
remainder: string;
36+
}
3237
var removable = new Removable();
3338
var { removed, ...removableRest } = removable;
39+
var i: I = removable;
40+
var { removed, ...removableRest2 } = i;
3441

3542
let computed = 'b';
3643
let computed2 = 'a';

0 commit comments

Comments
 (0)