Skip to content

Commit 309a361

Browse files
committed
Test method removal of object spread
Test that 1. Only class methods get removed 2. Methods from both left and right get removed.
1 parent 876dbe8 commit 309a361

File tree

3 files changed

+119
-0
lines changed

3 files changed

+119
-0
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
tests/cases/conformance/types/spread/spreadMethods.ts(7,4): error TS2339: Property 'm' does not exist on type '{ p: number; }'.
2+
tests/cases/conformance/types/spread/spreadMethods.ts(9,5): error TS2339: Property 'm' does not exist on type '{ p: number; }'.
3+
4+
5+
==== tests/cases/conformance/types/spread/spreadMethods.ts (2 errors) ====
6+
class K { p = 12; m() { } }
7+
interface I { p: number, m(): void }
8+
let k = new K()
9+
let sk = { ...k };
10+
let ssk = { ...k, ...k };
11+
sk.p;
12+
sk.m(); // error
13+
~
14+
!!! error TS2339: Property 'm' does not exist on type '{ p: number; }'.
15+
ssk.p;
16+
ssk.m(); // error
17+
~
18+
!!! error TS2339: Property 'm' does not exist on type '{ p: number; }'.
19+
let i: I = { p: 12, m() { } };
20+
let si = { ...i };
21+
let ssi = { ...i, ...i };
22+
si.p;
23+
si.m(); // ok
24+
ssi.p;
25+
ssi.m(); // ok
26+
let o = { p: 12, m() { } };
27+
let so = { ...o };
28+
let sso = { ...o, ...o };
29+
so.p;
30+
so.m(); // ok
31+
sso.p;
32+
sso.m(); // ok
33+
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
//// [spreadMethods.ts]
2+
class K { p = 12; m() { } }
3+
interface I { p: number, m(): void }
4+
let k = new K()
5+
let sk = { ...k };
6+
let ssk = { ...k, ...k };
7+
sk.p;
8+
sk.m(); // error
9+
ssk.p;
10+
ssk.m(); // error
11+
let i: I = { p: 12, m() { } };
12+
let si = { ...i };
13+
let ssi = { ...i, ...i };
14+
si.p;
15+
si.m(); // ok
16+
ssi.p;
17+
ssi.m(); // ok
18+
let o = { p: 12, m() { } };
19+
let so = { ...o };
20+
let sso = { ...o, ...o };
21+
so.p;
22+
so.m(); // ok
23+
sso.p;
24+
sso.m(); // ok
25+
26+
27+
//// [spreadMethods.js]
28+
var __assign = (this && this.__assign) || Object.assign || function(t) {
29+
for (var s, i = 1, n = arguments.length; i < n; i++) {
30+
s = arguments[i];
31+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
32+
t[p] = s[p];
33+
}
34+
return t;
35+
};
36+
var K = (function () {
37+
function K() {
38+
this.p = 12;
39+
}
40+
K.prototype.m = function () { };
41+
return K;
42+
}());
43+
var k = new K();
44+
var sk = __assign({}, k);
45+
var ssk = __assign({}, k, k);
46+
sk.p;
47+
sk.m(); // error
48+
ssk.p;
49+
ssk.m(); // error
50+
var i = { p: 12, m: function () { } };
51+
var si = __assign({}, i);
52+
var ssi = __assign({}, i, i);
53+
si.p;
54+
si.m(); // ok
55+
ssi.p;
56+
ssi.m(); // ok
57+
var o = { p: 12, m: function () { } };
58+
var so = __assign({}, o);
59+
var sso = __assign({}, o, o);
60+
so.p;
61+
so.m(); // ok
62+
sso.p;
63+
sso.m(); // ok
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class K { p = 12; m() { } }
2+
interface I { p: number, m(): void }
3+
let k = new K()
4+
let sk = { ...k };
5+
let ssk = { ...k, ...k };
6+
sk.p;
7+
sk.m(); // error
8+
ssk.p;
9+
ssk.m(); // error
10+
let i: I = { p: 12, m() { } };
11+
let si = { ...i };
12+
let ssi = { ...i, ...i };
13+
si.p;
14+
si.m(); // ok
15+
ssi.p;
16+
ssi.m(); // ok
17+
let o = { p: 12, m() { } };
18+
let so = { ...o };
19+
let sso = { ...o, ...o };
20+
so.p;
21+
so.m(); // ok
22+
sso.p;
23+
sso.m(); // ok

0 commit comments

Comments
 (0)