Skip to content

Commit e2e7091

Browse files
committed
add sanity checks
1 parent f07db72 commit e2e7091

8 files changed

+1041
-256
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
longObjectInstantiationChain1.ts(57,4): error TS2339: Property 'p51' does not exist on type 'merge<{ p1: number; }, { p2: number; }>'.
2+
longObjectInstantiationChain1.ts(62,4): error TS2339: Property 'p4' does not exist on type 'merge<merge<{ p1: number; }, { p2: number; }>, { p3: number; }>'.
3+
longObjectInstantiationChain1.ts(64,1): error TS2589: Type instantiation is excessively deep and possibly infinite.
4+
longObjectInstantiationChain1.ts(65,1): error TS2589: Type instantiation is excessively deep and possibly infinite.
5+
longObjectInstantiationChain1.ts(68,1): error TS2589: Type instantiation is excessively deep and possibly infinite.
6+
longObjectInstantiationChain1.ts(70,5): error TS2339: Property 'p38' does not exist on type 'merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<{ p1: number; }, { p2: number; }>, { p3: number; }>, { p4: number; }>, { p5: number; }>, { p6: number; }>, { p7: number; }>, { p8: number; }>, { p9: number; }>, { p10: number; }>, { p11: number; }>, { p12: number; }>, { p13: number; }>, { p14: number; }>, { p15: number; }>, { p16: number; }>, { p17: number; }>, { p18: number; }>, { p19: number; }>, { p20: number; }>, { p21: number; }>, { p22: number; }>, { p23: number; }>, { p24: number; }>, { p25: number; }>, { p26: number; }>, { p27: number; }>, { p28: number; }>, { p29: number; }>, { p30: number; }>, { p31: number; }>'.
7+
longObjectInstantiationChain1.ts(71,5): error TS2339: Property 'p51' does not exist on type 'merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<{ p1: number; }, { p2: number; }>, { p3: number; }>, { p4: number; }>, { p5: number; }>, { p6: number; }>, { p7: number; }>, { p8: number; }>, { p9: number; }>, { p10: number; }>, { p11: number; }>, { p12: number; }>, { p13: number; }>, { p14: number; }>, { p15: number; }>, { p16: number; }>, { p17: number; }>, { p18: number; }>, { p19: number; }>, { p20: number; }>, { p21: number; }>, { p22: number; }>, { p23: number; }>, { p24: number; }>, { p25: number; }>, { p26: number; }>, { p27: number; }>, { p28: number; }>, { p29: number; }>, { p30: number; }>, { p31: number; }>'.
8+
longObjectInstantiationChain1.ts(73,1): error TS2589: Type instantiation is excessively deep and possibly infinite.
9+
longObjectInstantiationChain1.ts(74,1): error TS2589: Type instantiation is excessively deep and possibly infinite.
10+
longObjectInstantiationChain1.ts(75,1): error TS2589: Type instantiation is excessively deep and possibly infinite.
11+
12+
13+
==== longObjectInstantiationChain1.ts (10 errors) ====
14+
export type merge<base, props> = Omit<base, keyof props & keyof base> & props;
15+
16+
declare const merge: <l, r>(l: l, r: r) => merge<l, r>;
17+
18+
const o1 = merge({ p1: 1 }, { p2: 2 });
19+
const o2 = merge(o1, { p3: 3 });
20+
const o3 = merge(o2, { p4: 4 });
21+
const o4 = merge(o3, { p5: 5 });
22+
const o5 = merge(o4, { p6: 6 });
23+
const o6 = merge(o5, { p7: 7 });
24+
const o7 = merge(o6, { p8: 8 });
25+
const o8 = merge(o7, { p9: 9 });
26+
const o9 = merge(o8, { p10: 10 });
27+
const o10 = merge(o9, { p11: 11 });
28+
const o11 = merge(o10, { p12: 12 });
29+
const o12 = merge(o11, { p13: 13 });
30+
const o13 = merge(o12, { p14: 14 });
31+
const o14 = merge(o13, { p15: 15 });
32+
const o15 = merge(o14, { p16: 16 });
33+
const o16 = merge(o15, { p17: 17 });
34+
const o17 = merge(o16, { p18: 18 });
35+
const o18 = merge(o17, { p19: 19 });
36+
const o19 = merge(o18, { p20: 20 });
37+
const o20 = merge(o19, { p21: 21 });
38+
const o21 = merge(o20, { p22: 22 });
39+
const o22 = merge(o21, { p23: 23 });
40+
const o23 = merge(o22, { p24: 24 });
41+
const o24 = merge(o23, { p25: 25 });
42+
const o25 = merge(o24, { p26: 26 });
43+
const o26 = merge(o25, { p27: 27 });
44+
const o27 = merge(o26, { p28: 28 });
45+
const o28 = merge(o27, { p29: 29 });
46+
const o29 = merge(o28, { p30: 30 });
47+
const o30 = merge(o29, { p31: 31 });
48+
const o31 = merge(o30, { p32: 32 });
49+
const o32 = merge(o31, { p33: 33 });
50+
const o33 = merge(o32, { p34: 34 });
51+
const o34 = merge(o33, { p35: 35 });
52+
const o35 = merge(o34, { p36: 36 });
53+
const o36 = merge(o35, { p37: 37 });
54+
const o37 = merge(o36, { p38: 38 });
55+
const o38 = merge(o37, { p39: 39 });
56+
const o39 = merge(o38, { p40: 40 });
57+
const o40 = merge(o39, { p41: 41 });
58+
const o41 = merge(o40, { p42: 42 });
59+
const o42 = merge(o41, { p43: 43 });
60+
const o43 = merge(o42, { p44: 44 });
61+
const o44 = merge(o43, { p45: 45 });
62+
const o45 = merge(o44, { p46: 46 });
63+
const o46 = merge(o45, { p47: 47 });
64+
const o47 = merge(o46, { p48: 48 });
65+
const o48 = merge(o47, { p49: 49 });
66+
const o49 = merge(o48, { p50: 50 });
67+
const o50 = merge(o49, { p51: 51 });
68+
69+
o1.p1;
70+
o1.p51; // error
71+
~~~
72+
!!! error TS2339: Property 'p51' does not exist on type 'merge<{ p1: number; }, { p2: number; }>'.
73+
74+
o2.p1;
75+
o2.p2;
76+
o2.p3;
77+
o2.p4; // error
78+
~~
79+
!!! error TS2339: Property 'p4' does not exist on type 'merge<merge<{ p1: number; }, { p2: number; }>, { p3: number; }>'.
80+
81+
o25.p1;
82+
~~~~~~
83+
!!! error TS2589: Type instantiation is excessively deep and possibly infinite.
84+
o25.p10;
85+
~~~~~~~
86+
!!! error TS2589: Type instantiation is excessively deep and possibly infinite.
87+
o25.p26;
88+
89+
o30.p1;
90+
~~~~~~
91+
!!! error TS2589: Type instantiation is excessively deep and possibly infinite.
92+
o30.p31;
93+
o30.p38; // error
94+
~~~
95+
!!! error TS2339: Property 'p38' does not exist on type 'merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<{ p1: number; }, { p2: number; }>, { p3: number; }>, { p4: number; }>, { p5: number; }>, { p6: number; }>, { p7: number; }>, { p8: number; }>, { p9: number; }>, { p10: number; }>, { p11: number; }>, { p12: number; }>, { p13: number; }>, { p14: number; }>, { p15: number; }>, { p16: number; }>, { p17: number; }>, { p18: number; }>, { p19: number; }>, { p20: number; }>, { p21: number; }>, { p22: number; }>, { p23: number; }>, { p24: number; }>, { p25: number; }>, { p26: number; }>, { p27: number; }>, { p28: number; }>, { p29: number; }>, { p30: number; }>, { p31: number; }>'.
96+
o30.p51; // error
97+
~~~
98+
!!! error TS2339: Property 'p51' does not exist on type 'merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<merge<{ p1: number; }, { p2: number; }>, { p3: number; }>, { p4: number; }>, { p5: number; }>, { p6: number; }>, { p7: number; }>, { p8: number; }>, { p9: number; }>, { p10: number; }>, { p11: number; }>, { p12: number; }>, { p13: number; }>, { p14: number; }>, { p15: number; }>, { p16: number; }>, { p17: number; }>, { p18: number; }>, { p19: number; }>, { p20: number; }>, { p21: number; }>, { p22: number; }>, { p23: number; }>, { p24: number; }>, { p25: number; }>, { p26: number; }>, { p27: number; }>, { p28: number; }>, { p29: number; }>, { p30: number; }>, { p31: number; }>'.
99+
100+
o50.p1;
101+
~~~~~~
102+
!!! error TS2589: Type instantiation is excessively deep and possibly infinite.
103+
o50.p31;
104+
~~~~~~~
105+
!!! error TS2589: Type instantiation is excessively deep and possibly infinite.
106+
o50.p38;
107+
~~~~~~~
108+
!!! error TS2589: Type instantiation is excessively deep and possibly infinite.
109+
o50.p51;
110+

tests/baselines/reference/longObjectInstantiationChain1.symbols

+77
Original file line numberDiff line numberDiff line change
@@ -323,3 +323,80 @@ const o50 = merge(o49, { p51: 51 });
323323
>o49 : Symbol(o49, Decl(longObjectInstantiationChain1.ts, 52, 5))
324324
>p51 : Symbol(p51, Decl(longObjectInstantiationChain1.ts, 53, 24))
325325

326+
o1.p1;
327+
>o1.p1 : Symbol(p1, Decl(longObjectInstantiationChain1.ts, 4, 18))
328+
>o1 : Symbol(o1, Decl(longObjectInstantiationChain1.ts, 4, 5))
329+
>p1 : Symbol(p1, Decl(longObjectInstantiationChain1.ts, 4, 18))
330+
331+
o1.p51; // error
332+
>o1 : Symbol(o1, Decl(longObjectInstantiationChain1.ts, 4, 5))
333+
334+
o2.p1;
335+
>o2.p1 : Symbol(p1, Decl(longObjectInstantiationChain1.ts, 4, 18))
336+
>o2 : Symbol(o2, Decl(longObjectInstantiationChain1.ts, 5, 5))
337+
>p1 : Symbol(p1, Decl(longObjectInstantiationChain1.ts, 4, 18))
338+
339+
o2.p2;
340+
>o2.p2 : Symbol(p2, Decl(longObjectInstantiationChain1.ts, 4, 29))
341+
>o2 : Symbol(o2, Decl(longObjectInstantiationChain1.ts, 5, 5))
342+
>p2 : Symbol(p2, Decl(longObjectInstantiationChain1.ts, 4, 29))
343+
344+
o2.p3;
345+
>o2.p3 : Symbol(p3, Decl(longObjectInstantiationChain1.ts, 5, 22))
346+
>o2 : Symbol(o2, Decl(longObjectInstantiationChain1.ts, 5, 5))
347+
>p3 : Symbol(p3, Decl(longObjectInstantiationChain1.ts, 5, 22))
348+
349+
o2.p4; // error
350+
>o2 : Symbol(o2, Decl(longObjectInstantiationChain1.ts, 5, 5))
351+
352+
o25.p1;
353+
>o25.p1 : Symbol(p1, Decl(longObjectInstantiationChain1.ts, 4, 18))
354+
>o25 : Symbol(o25, Decl(longObjectInstantiationChain1.ts, 28, 5))
355+
>p1 : Symbol(p1, Decl(longObjectInstantiationChain1.ts, 4, 18))
356+
357+
o25.p10;
358+
>o25.p10 : Symbol(p10, Decl(longObjectInstantiationChain1.ts, 12, 22))
359+
>o25 : Symbol(o25, Decl(longObjectInstantiationChain1.ts, 28, 5))
360+
>p10 : Symbol(p10, Decl(longObjectInstantiationChain1.ts, 12, 22))
361+
362+
o25.p26;
363+
>o25.p26 : Symbol(p26, Decl(longObjectInstantiationChain1.ts, 28, 24))
364+
>o25 : Symbol(o25, Decl(longObjectInstantiationChain1.ts, 28, 5))
365+
>p26 : Symbol(p26, Decl(longObjectInstantiationChain1.ts, 28, 24))
366+
367+
o30.p1;
368+
>o30.p1 : Symbol(p1, Decl(longObjectInstantiationChain1.ts, 4, 18))
369+
>o30 : Symbol(o30, Decl(longObjectInstantiationChain1.ts, 33, 5))
370+
>p1 : Symbol(p1, Decl(longObjectInstantiationChain1.ts, 4, 18))
371+
372+
o30.p31;
373+
>o30.p31 : Symbol(p31, Decl(longObjectInstantiationChain1.ts, 33, 24))
374+
>o30 : Symbol(o30, Decl(longObjectInstantiationChain1.ts, 33, 5))
375+
>p31 : Symbol(p31, Decl(longObjectInstantiationChain1.ts, 33, 24))
376+
377+
o30.p38; // error
378+
>o30 : Symbol(o30, Decl(longObjectInstantiationChain1.ts, 33, 5))
379+
380+
o30.p51; // error
381+
>o30 : Symbol(o30, Decl(longObjectInstantiationChain1.ts, 33, 5))
382+
383+
o50.p1;
384+
>o50.p1 : Symbol(p1, Decl(longObjectInstantiationChain1.ts, 4, 18))
385+
>o50 : Symbol(o50, Decl(longObjectInstantiationChain1.ts, 53, 5))
386+
>p1 : Symbol(p1, Decl(longObjectInstantiationChain1.ts, 4, 18))
387+
388+
o50.p31;
389+
>o50.p31 : Symbol(p31, Decl(longObjectInstantiationChain1.ts, 33, 24))
390+
>o50 : Symbol(o50, Decl(longObjectInstantiationChain1.ts, 53, 5))
391+
>p31 : Symbol(p31, Decl(longObjectInstantiationChain1.ts, 33, 24))
392+
393+
o50.p38;
394+
>o50.p38 : Symbol(p38, Decl(longObjectInstantiationChain1.ts, 40, 24))
395+
>o50 : Symbol(o50, Decl(longObjectInstantiationChain1.ts, 53, 5))
396+
>p38 : Symbol(p38, Decl(longObjectInstantiationChain1.ts, 40, 24))
397+
398+
o50.p51;
399+
>o50.p51 : Symbol(p51, Decl(longObjectInstantiationChain1.ts, 53, 24))
400+
>o50 : Symbol(o50, Decl(longObjectInstantiationChain1.ts, 53, 5))
401+
>p51 : Symbol(p51, Decl(longObjectInstantiationChain1.ts, 53, 24))
402+

0 commit comments

Comments
 (0)