@@ -142,7 +142,9 @@ private SyntaxNodeOrList GenerateCSharpAst(Ts.TsTypes.INode node, NodeContext? c
142142 case Ts . TsTypes . SyntaxKind . ArrayLiteralExpression :
143143 {
144144 var n = node . AsType < Ts . TsTypes . ArrayLiteralExpression > ( ) ;
145- var elements = n . Elements . Select ( x => ( SyntaxNodeOrToken ) GenerateCSharpAst ( x ) . AsT0 )
145+ var elements = n . Elements
146+ . Where ( x => x . Kind != Ts . TsTypes . SyntaxKind . SpreadElement ) // remove SpreadElement
147+ . Select ( x => ( SyntaxNodeOrToken ) GenerateCSharpAst ( x ) . AsT0 )
146148 . Separate ( SyntaxFactory . Token ( SyntaxKind . CommaToken ) ) ;
147149 var arrayType = SyntaxFactory . ArrayType (
148150 SyntaxFactory . PredefinedType (
@@ -152,11 +154,57 @@ private SyntaxNodeOrList GenerateCSharpAst(Ts.TsTypes.INode node, NodeContext? c
152154 SyntaxFactory . ArrayRankSpecifier (
153155 SyntaxFactory . SingletonSeparatedList < ExpressionSyntax > (
154156 SyntaxFactory . OmittedArraySizeExpression ( ) ) ) ) ) ;
155- return SyntaxFactory . ArrayCreationExpression ( arrayType )
156- . WithInitializer (
157- SyntaxFactory . InitializerExpression (
158- SyntaxKind . ArrayInitializerExpression ,
159- SyntaxFactory . SeparatedList < ExpressionSyntax > ( elements ) ) ) ;
157+
158+ var arrayCreation = SyntaxFactory . ArrayCreationExpression ( arrayType )
159+ . WithInitializer
160+ (
161+ SyntaxFactory . InitializerExpression ( SyntaxKind . ArrayInitializerExpression , SyntaxFactory . SeparatedList < ExpressionSyntax > ( elements ) )
162+ ) ;
163+
164+ /*
165+ * typescript
166+ * var arr = [
167+ * { },
168+ * ...anotherArray
169+ * ];
170+ * c#
171+ * var arr = new object[] {
172+ * new {}
173+ * }.Union(anotherArray).ToArray();
174+ */
175+ ExpressionSyntax chain = arrayCreation ;
176+ var toArray = false ;
177+ foreach ( var element in n . Elements . Where ( x => x . Kind == Ts . TsTypes . SyntaxKind . SpreadElement ) )
178+ {
179+ toArray = true ;
180+ var el = element . AsType < Ts . TsTypes . SpreadElement > ( ) ;
181+ chain = SyntaxFactory . InvocationExpression (
182+ SyntaxFactory . MemberAccessExpression (
183+ SyntaxKind . SimpleMemberAccessExpression ,
184+ chain ,
185+ SyntaxFactory . IdentifierName ( "Union" )
186+ )
187+ ) . WithArgumentList (
188+ SyntaxFactory . ArgumentList (
189+ SyntaxFactory . SingletonSeparatedList (
190+ SyntaxFactory . Argument ( SyntaxFactory . IdentifierName ( el . IdentifierStr ) )
191+ )
192+ )
193+ ) ;
194+ }
195+
196+ if ( toArray )
197+ {
198+ return SyntaxFactory . InvocationExpression (
199+ SyntaxFactory . MemberAccessExpression (
200+ SyntaxKind . SimpleMemberAccessExpression ,
201+ chain ,
202+ SyntaxFactory . IdentifierName ( "ToArray" )
203+ )
204+ ) ;
205+ }
206+
207+ return arrayCreation ;
160208 }
161209 case Ts . TsTypes . SyntaxKind . AsExpression :
162210 {
0 commit comments