@@ -91,6 +91,121 @@ export const IntersectionType = BaseIntersectionType as <
91
91
decorator ?: ClassDecoratorFactory ,
92
92
) => Class < A & B , Args > ;
93
93
94
+ export function IntersectTypes < A , Args extends unknown [ ] > (
95
+ type1 : AbstractClass < A , Args > ,
96
+ ) : IntersectedType < A , Args > ;
97
+ export function IntersectTypes < A , B , Args extends unknown [ ] > (
98
+ type1 : AbstractClass < A , Args > ,
99
+ type2 : AbstractClass < B > ,
100
+ ) : IntersectedType < A & B , Args > ;
101
+ export function IntersectTypes < A , B , C , Args extends unknown [ ] > (
102
+ type1 : AbstractClass < A , Args > ,
103
+ type2 : AbstractClass < B > ,
104
+ type3 : AbstractClass < C > ,
105
+ ) : IntersectedType < A & B & C , Args > ;
106
+ export function IntersectTypes < A , B , C , D , Args extends unknown [ ] > (
107
+ type1 : AbstractClass < A , Args > ,
108
+ type2 : AbstractClass < B > ,
109
+ type3 : AbstractClass < C > ,
110
+ type4 : AbstractClass < D > ,
111
+ ) : IntersectedType < A & B & C & D , Args > ;
112
+ export function IntersectTypes < A , B , C , D , E , Args extends unknown [ ] > (
113
+ type1 : AbstractClass < A , Args > ,
114
+ type2 : AbstractClass < B > ,
115
+ type3 : AbstractClass < C > ,
116
+ type4 : AbstractClass < D > ,
117
+ type5 : AbstractClass < E > ,
118
+ ) : IntersectedType < A & B & C & D & E , Args > ;
119
+ export function IntersectTypes < A , B , C , D , E , F , Args extends unknown [ ] > (
120
+ type1 : AbstractClass < A , Args > ,
121
+ type2 : AbstractClass < B > ,
122
+ type3 : AbstractClass < C > ,
123
+ type4 : AbstractClass < D > ,
124
+ type5 : AbstractClass < E > ,
125
+ type6 : AbstractClass < F > ,
126
+ ) : IntersectedType < A & B & C & D & E & F , Args > ;
127
+ export function IntersectTypes < A , B , C , D , E , F , G , Args extends unknown [ ] > (
128
+ type1 : AbstractClass < A , Args > ,
129
+ type2 : AbstractClass < B > ,
130
+ type3 : AbstractClass < C > ,
131
+ type4 : AbstractClass < D > ,
132
+ type5 : AbstractClass < E > ,
133
+ type6 : AbstractClass < F > ,
134
+ type7 : AbstractClass < G > ,
135
+ ) : IntersectedType < A & B & C & D & E & F & G , Args > ;
136
+ export function IntersectTypes < A , B , C , D , E , F , G , H , Args extends unknown [ ] > (
137
+ type1 : AbstractClass < A , Args > ,
138
+ type2 : AbstractClass < B > ,
139
+ type3 : AbstractClass < C > ,
140
+ type4 : AbstractClass < D > ,
141
+ type5 : AbstractClass < E > ,
142
+ type6 : AbstractClass < F > ,
143
+ type7 : AbstractClass < G > ,
144
+ type8 : AbstractClass < H > ,
145
+ ) : IntersectedType < A & B & C & D & E & F & G & H , Args > ;
146
+ export function IntersectTypes <
147
+ A ,
148
+ B ,
149
+ C ,
150
+ D ,
151
+ E ,
152
+ F ,
153
+ G ,
154
+ H ,
155
+ I ,
156
+ Args extends unknown [ ] ,
157
+ > (
158
+ type1 : AbstractClass < A , Args > ,
159
+ type2 : AbstractClass < B > ,
160
+ type3 : AbstractClass < C > ,
161
+ type4 : AbstractClass < D > ,
162
+ type5 : AbstractClass < E > ,
163
+ type6 : AbstractClass < F > ,
164
+ type7 : AbstractClass < G > ,
165
+ type8 : AbstractClass < H > ,
166
+ type9 : AbstractClass < I > ,
167
+ ) : IntersectedType < A & B & C & D & E & F & G & H & I , Args > ;
168
+ export function IntersectTypes <
169
+ A ,
170
+ B ,
171
+ C ,
172
+ D ,
173
+ E ,
174
+ F ,
175
+ G ,
176
+ H ,
177
+ I ,
178
+ Args extends unknown [ ] ,
179
+ > (
180
+ type1 : AbstractClass < A , Args > ,
181
+ type2 : AbstractClass < B > ,
182
+ type3 : AbstractClass < C > ,
183
+ type4 : AbstractClass < D > ,
184
+ type5 : AbstractClass < E > ,
185
+ type6 : AbstractClass < F > ,
186
+ type7 : AbstractClass < G > ,
187
+ type8 : AbstractClass < H > ,
188
+ type9 : AbstractClass < I > ,
189
+ ...types : Array < AbstractClass < any > >
190
+ ) : IntersectedType < unknown , Args > ;
191
+ export function IntersectTypes < T , Args extends unknown [ ] > (
192
+ ...types : Array < AbstractClass < T , Args > >
193
+ ) : IntersectedType < T , Args > {
194
+ return Object . assign (
195
+ ( types as any ) . reduce (
196
+ ( a : any , b : any ) => ( a ? IntersectionType ( a , b ) : b ) ,
197
+ undefined ,
198
+ ) ,
199
+ {
200
+ members : types ,
201
+ } ,
202
+ ) ;
203
+ }
204
+
205
+ type IntersectedType < T , Args extends unknown [ ] > = Class < T , Args > & {
206
+ members : Array < Class < unknown > > ;
207
+ } ;
208
+
94
209
function TODOFn ( ..._args : any [ ] ) {
95
210
throw new NotImplementedException ( ) ;
96
211
}
0 commit comments