File: objectSpreadRepeatedComplexity.types

package info (click to toggle)
node-typescript 5.0.4%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 459,140 kB
  • sloc: javascript: 1,972,754; makefile: 6; sh: 1
file content (339 lines) | stat: -rw-r--r-- 14,504 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
=== tests/cases/conformance/types/spread/objectSpreadRepeatedComplexity.ts ===
function f(cnd: Record<number, boolean>){
>f : (cnd: Record<number, boolean>) => { prop20a?: number | undefined; prop20b?: number | undefined; prop19a?: number | undefined; prop19b?: number | undefined; prop18a?: number | undefined; prop18b?: number | undefined; prop17a?: number | undefined; prop17b?: number | undefined; prop16a?: number | undefined; prop16b?: number | undefined; prop15a?: number | undefined; prop15b?: number | undefined; prop14a?: number | undefined; prop14b?: number | undefined; prop13a?: number | undefined; prop13b?: number | undefined; prop12a?: number | undefined; prop12b?: number | undefined; prop11a?: number | undefined; prop11b?: number | undefined; prop10a?: number | undefined; prop10b?: number | undefined; prop9a?: number | undefined; prop9b?: number | undefined; prop8a?: number | undefined; prop8b?: number | undefined; prop7a?: number | undefined; prop7b?: number | undefined; prop6a?: number | undefined; prop6b?: number | undefined; prop5a?: number | undefined; prop5b?: number | undefined; prop4a?: number | undefined; prop4b?: number | undefined; prop3a?: number | undefined; prop3b?: number | undefined; prop0?: number | undefined; }
>cnd : Record<number, boolean>

    // Type is a union of 2^(n-1) members, where n is the number of spread objects
    return {
>{        // Without this one, it collapses to {} ?        ...(cnd[1] &&            cnd[2] && {            prop0: 0,        }),        // With one prop each, it collapses to a single object (#34853?)        ...(cnd[3] && {            prop3a: 1,            prop3b: 1,        }),        ...(cnd[4] && {            prop4a: 1,            prop4b: 1,        }),        ...(cnd[5] && {            prop5a: 1,            prop5b: 1,        }),        ...(cnd[6] && {            prop6a: 1,            prop6b: 1,        }),        ...(cnd[7] && {            prop7a: 1,            prop7b: 1,        }),        ...(cnd[8] && {            prop8a: 1,            prop8b: 1,        }),        ...(cnd[9] && {            prop9a: 1,            prop9b: 1,        }),        ...(cnd[10] && {            prop10a: 1,            prop10b: 1,        }),        ...(cnd[11] && {            prop11a: 1,            prop11b: 1,        }),        ...(cnd[12] && {            prop12a: 1,            prop12b: 1,        }),        ...(cnd[13] && {            prop13a: 1,            prop13b: 1,        }),        ...(cnd[14] && {            prop14a: 1,            prop14b: 1,        }),        ...(cnd[15] && {            prop15a: 1,            prop15b: 1,        }),        ...(cnd[16] && {            prop16a: 1,            prop16b: 1,        }),        ...(cnd[17] && {            prop17a: 1,            prop17b: 1,        }),        ...(cnd[18] && {            prop18a: 1,            prop18b: 1,        }),        ...(cnd[19] && {            prop19a: 1,            prop19b: 1,        }),        ...(cnd[20] && {            prop20a: 1,            prop20b: 1,        }),    } : { prop20a?: number | undefined; prop20b?: number | undefined; prop19a?: number | undefined; prop19b?: number | undefined; prop18a?: number | undefined; prop18b?: number | undefined; prop17a?: number | undefined; prop17b?: number | undefined; prop16a?: number | undefined; prop16b?: number | undefined; prop15a?: number | undefined; prop15b?: number | undefined; prop14a?: number | undefined; prop14b?: number | undefined; prop13a?: number | undefined; prop13b?: number | undefined; prop12a?: number | undefined; prop12b?: number | undefined; prop11a?: number | undefined; prop11b?: number | undefined; prop10a?: number | undefined; prop10b?: number | undefined; prop9a?: number | undefined; prop9b?: number | undefined; prop8a?: number | undefined; prop8b?: number | undefined; prop7a?: number | undefined; prop7b?: number | undefined; prop6a?: number | undefined; prop6b?: number | undefined; prop5a?: number | undefined; prop5b?: number | undefined; prop4a?: number | undefined; prop4b?: number | undefined; prop3a?: number | undefined; prop3b?: number | undefined; prop0?: number | undefined; }

        // Without this one, it collapses to {} ?
        ...(cnd[1] &&
>(cnd[1] &&            cnd[2] && {            prop0: 0,        }) : false | { prop0: number; }
>cnd[1] &&            cnd[2] && {            prop0: 0,        } : false | { prop0: number; }
>cnd[1] &&            cnd[2] : boolean
>cnd[1] : boolean
>cnd : Record<number, boolean>
>1 : 1

            cnd[2] && {
>cnd[2] : boolean
>cnd : Record<number, boolean>
>2 : 2
>{            prop0: 0,        } : { prop0: number; }

            prop0: 0,
>prop0 : number
>0 : 0

        }),

        // With one prop each, it collapses to a single object (#34853?)
        ...(cnd[3] && {
>(cnd[3] && {            prop3a: 1,            prop3b: 1,        }) : false | { prop3a: number; prop3b: number; }
>cnd[3] && {            prop3a: 1,            prop3b: 1,        } : false | { prop3a: number; prop3b: number; }
>cnd[3] : boolean
>cnd : Record<number, boolean>
>3 : 3
>{            prop3a: 1,            prop3b: 1,        } : { prop3a: number; prop3b: number; }

            prop3a: 1,
>prop3a : number
>1 : 1

            prop3b: 1,
>prop3b : number
>1 : 1

        }),
        ...(cnd[4] && {
>(cnd[4] && {            prop4a: 1,            prop4b: 1,        }) : false | { prop4a: number; prop4b: number; }
>cnd[4] && {            prop4a: 1,            prop4b: 1,        } : false | { prop4a: number; prop4b: number; }
>cnd[4] : boolean
>cnd : Record<number, boolean>
>4 : 4
>{            prop4a: 1,            prop4b: 1,        } : { prop4a: number; prop4b: number; }

            prop4a: 1,
>prop4a : number
>1 : 1

            prop4b: 1,
>prop4b : number
>1 : 1

        }),
        ...(cnd[5] && {
>(cnd[5] && {            prop5a: 1,            prop5b: 1,        }) : false | { prop5a: number; prop5b: number; }
>cnd[5] && {            prop5a: 1,            prop5b: 1,        } : false | { prop5a: number; prop5b: number; }
>cnd[5] : boolean
>cnd : Record<number, boolean>
>5 : 5
>{            prop5a: 1,            prop5b: 1,        } : { prop5a: number; prop5b: number; }

            prop5a: 1,
>prop5a : number
>1 : 1

            prop5b: 1,
>prop5b : number
>1 : 1

        }),
        ...(cnd[6] && {
>(cnd[6] && {            prop6a: 1,            prop6b: 1,        }) : false | { prop6a: number; prop6b: number; }
>cnd[6] && {            prop6a: 1,            prop6b: 1,        } : false | { prop6a: number; prop6b: number; }
>cnd[6] : boolean
>cnd : Record<number, boolean>
>6 : 6
>{            prop6a: 1,            prop6b: 1,        } : { prop6a: number; prop6b: number; }

            prop6a: 1,
>prop6a : number
>1 : 1

            prop6b: 1,
>prop6b : number
>1 : 1

        }),
        ...(cnd[7] && {
>(cnd[7] && {            prop7a: 1,            prop7b: 1,        }) : false | { prop7a: number; prop7b: number; }
>cnd[7] && {            prop7a: 1,            prop7b: 1,        } : false | { prop7a: number; prop7b: number; }
>cnd[7] : boolean
>cnd : Record<number, boolean>
>7 : 7
>{            prop7a: 1,            prop7b: 1,        } : { prop7a: number; prop7b: number; }

            prop7a: 1,
>prop7a : number
>1 : 1

            prop7b: 1,
>prop7b : number
>1 : 1

        }),
        ...(cnd[8] && {
>(cnd[8] && {            prop8a: 1,            prop8b: 1,        }) : false | { prop8a: number; prop8b: number; }
>cnd[8] && {            prop8a: 1,            prop8b: 1,        } : false | { prop8a: number; prop8b: number; }
>cnd[8] : boolean
>cnd : Record<number, boolean>
>8 : 8
>{            prop8a: 1,            prop8b: 1,        } : { prop8a: number; prop8b: number; }

            prop8a: 1,
>prop8a : number
>1 : 1

            prop8b: 1,
>prop8b : number
>1 : 1

        }),
        ...(cnd[9] && {
>(cnd[9] && {            prop9a: 1,            prop9b: 1,        }) : false | { prop9a: number; prop9b: number; }
>cnd[9] && {            prop9a: 1,            prop9b: 1,        } : false | { prop9a: number; prop9b: number; }
>cnd[9] : boolean
>cnd : Record<number, boolean>
>9 : 9
>{            prop9a: 1,            prop9b: 1,        } : { prop9a: number; prop9b: number; }

            prop9a: 1,
>prop9a : number
>1 : 1

            prop9b: 1,
>prop9b : number
>1 : 1

        }),
        ...(cnd[10] && {
>(cnd[10] && {            prop10a: 1,            prop10b: 1,        }) : false | { prop10a: number; prop10b: number; }
>cnd[10] && {            prop10a: 1,            prop10b: 1,        } : false | { prop10a: number; prop10b: number; }
>cnd[10] : boolean
>cnd : Record<number, boolean>
>10 : 10
>{            prop10a: 1,            prop10b: 1,        } : { prop10a: number; prop10b: number; }

            prop10a: 1,
>prop10a : number
>1 : 1

            prop10b: 1,
>prop10b : number
>1 : 1

        }),
        ...(cnd[11] && {
>(cnd[11] && {            prop11a: 1,            prop11b: 1,        }) : false | { prop11a: number; prop11b: number; }
>cnd[11] && {            prop11a: 1,            prop11b: 1,        } : false | { prop11a: number; prop11b: number; }
>cnd[11] : boolean
>cnd : Record<number, boolean>
>11 : 11
>{            prop11a: 1,            prop11b: 1,        } : { prop11a: number; prop11b: number; }

            prop11a: 1,
>prop11a : number
>1 : 1

            prop11b: 1,
>prop11b : number
>1 : 1

        }),
        ...(cnd[12] && {
>(cnd[12] && {            prop12a: 1,            prop12b: 1,        }) : false | { prop12a: number; prop12b: number; }
>cnd[12] && {            prop12a: 1,            prop12b: 1,        } : false | { prop12a: number; prop12b: number; }
>cnd[12] : boolean
>cnd : Record<number, boolean>
>12 : 12
>{            prop12a: 1,            prop12b: 1,        } : { prop12a: number; prop12b: number; }

            prop12a: 1,
>prop12a : number
>1 : 1

            prop12b: 1,
>prop12b : number
>1 : 1

        }),
        ...(cnd[13] && {
>(cnd[13] && {            prop13a: 1,            prop13b: 1,        }) : false | { prop13a: number; prop13b: number; }
>cnd[13] && {            prop13a: 1,            prop13b: 1,        } : false | { prop13a: number; prop13b: number; }
>cnd[13] : boolean
>cnd : Record<number, boolean>
>13 : 13
>{            prop13a: 1,            prop13b: 1,        } : { prop13a: number; prop13b: number; }

            prop13a: 1,
>prop13a : number
>1 : 1

            prop13b: 1,
>prop13b : number
>1 : 1

        }),
        ...(cnd[14] && {
>(cnd[14] && {            prop14a: 1,            prop14b: 1,        }) : false | { prop14a: number; prop14b: number; }
>cnd[14] && {            prop14a: 1,            prop14b: 1,        } : false | { prop14a: number; prop14b: number; }
>cnd[14] : boolean
>cnd : Record<number, boolean>
>14 : 14
>{            prop14a: 1,            prop14b: 1,        } : { prop14a: number; prop14b: number; }

            prop14a: 1,
>prop14a : number
>1 : 1

            prop14b: 1,
>prop14b : number
>1 : 1

        }),
        ...(cnd[15] && {
>(cnd[15] && {            prop15a: 1,            prop15b: 1,        }) : false | { prop15a: number; prop15b: number; }
>cnd[15] && {            prop15a: 1,            prop15b: 1,        } : false | { prop15a: number; prop15b: number; }
>cnd[15] : boolean
>cnd : Record<number, boolean>
>15 : 15
>{            prop15a: 1,            prop15b: 1,        } : { prop15a: number; prop15b: number; }

            prop15a: 1,
>prop15a : number
>1 : 1

            prop15b: 1,
>prop15b : number
>1 : 1

        }),
        ...(cnd[16] && {
>(cnd[16] && {            prop16a: 1,            prop16b: 1,        }) : false | { prop16a: number; prop16b: number; }
>cnd[16] && {            prop16a: 1,            prop16b: 1,        } : false | { prop16a: number; prop16b: number; }
>cnd[16] : boolean
>cnd : Record<number, boolean>
>16 : 16
>{            prop16a: 1,            prop16b: 1,        } : { prop16a: number; prop16b: number; }

            prop16a: 1,
>prop16a : number
>1 : 1

            prop16b: 1,
>prop16b : number
>1 : 1

        }),
        ...(cnd[17] && {
>(cnd[17] && {            prop17a: 1,            prop17b: 1,        }) : false | { prop17a: number; prop17b: number; }
>cnd[17] && {            prop17a: 1,            prop17b: 1,        } : false | { prop17a: number; prop17b: number; }
>cnd[17] : boolean
>cnd : Record<number, boolean>
>17 : 17
>{            prop17a: 1,            prop17b: 1,        } : { prop17a: number; prop17b: number; }

            prop17a: 1,
>prop17a : number
>1 : 1

            prop17b: 1,
>prop17b : number
>1 : 1

        }),
        ...(cnd[18] && {
>(cnd[18] && {            prop18a: 1,            prop18b: 1,        }) : false | { prop18a: number; prop18b: number; }
>cnd[18] && {            prop18a: 1,            prop18b: 1,        } : false | { prop18a: number; prop18b: number; }
>cnd[18] : boolean
>cnd : Record<number, boolean>
>18 : 18
>{            prop18a: 1,            prop18b: 1,        } : { prop18a: number; prop18b: number; }

            prop18a: 1,
>prop18a : number
>1 : 1

            prop18b: 1,
>prop18b : number
>1 : 1

        }),
        ...(cnd[19] && {
>(cnd[19] && {            prop19a: 1,            prop19b: 1,        }) : false | { prop19a: number; prop19b: number; }
>cnd[19] && {            prop19a: 1,            prop19b: 1,        } : false | { prop19a: number; prop19b: number; }
>cnd[19] : boolean
>cnd : Record<number, boolean>
>19 : 19
>{            prop19a: 1,            prop19b: 1,        } : { prop19a: number; prop19b: number; }

            prop19a: 1,
>prop19a : number
>1 : 1

            prop19b: 1,
>prop19b : number
>1 : 1

        }),
        ...(cnd[20] && {
>(cnd[20] && {            prop20a: 1,            prop20b: 1,        }) : false | { prop20a: number; prop20b: number; }
>cnd[20] && {            prop20a: 1,            prop20b: 1,        } : false | { prop20a: number; prop20b: number; }
>cnd[20] : boolean
>cnd : Record<number, boolean>
>20 : 20
>{            prop20a: 1,            prop20b: 1,        } : { prop20a: number; prop20b: number; }

            prop20a: 1,
>prop20a : number
>1 : 1

            prop20b: 1,
>prop20b : number
>1 : 1

        }),
    };
}