@@ -37,6 +37,8 @@ public class CommonJsGenerator : ILangGenerator
3737
3838 public TypeScriptGenerator Gen { get ; set ; }
3939
40+ public Func < string , string > ReturnTypeFilter { get ; set ; } = type => type ;
41+
4042 public string Type ( string type , string [ ] genericArgs )
4143 {
4244 var typeName = Gen . Type ( type , genericArgs ) ;
@@ -188,12 +190,15 @@ public string GetCode(MetadataTypes metadata, IRequest request, INativeTypesMeta
188190 if ( operation ? . ReturnsVoid == true )
189191 return nameof ( IReturnVoid ) ;
190192 if ( operation ? . ReturnType != null )
191- return Gen . Type ( "IReturn`1" , new [ ]
193+ {
194+ var returnType = Gen . Type ( "IReturn`1" , new [ ]
192195 {
193196 TypeScriptGenerator . ReturnTypeAliases . TryGetValue ( operation . ReturnType . Name , out var returnTypeAlias )
194197 ? returnTypeAlias
195198 : Type ( operation . ReturnType . Name , operation . ReturnType . GenericArgs )
196199 } ) ;
200+ return returnType ;
201+ }
197202 return response != null
198203 ? Gen . Type ( "IReturn`1" , new [ ] { Gen . Type ( response . Name , response . GenericArgs ) } )
199204 : null ;
@@ -323,15 +328,7 @@ private string AppendType(ref StringBuilderWrapper sb, MetadataType type, string
323328 var types = implStr . RightPart ( '<' ) ;
324329 var returnType = types . Substring ( 0 , types . Length - 1 ) ;
325330
326- // This is to avoid invalid syntax such as "return new string()"
327- TypeScriptGenerator . primitiveDefaultValues . TryGetValue ( returnType , out var replaceReturnType ) ;
328-
329- if ( returnType == "any" )
330- replaceReturnType = "{}" ;
331- else if ( returnType . EndsWith ( "[]" ) )
332- replaceReturnType = $ "new Array<{ returnType . Substring ( 0 , returnType . Length - 2 ) } >()";
333-
334- var responseName = replaceReturnType ?? $ "new { returnType } ()";
331+ var responseName = GetReturnType ( returnType ) ;
335332 responseTypeExpression = typeName + ".prototype.createResponse = function () { return " + responseName + "; };" ;
336333 }
337334 else if ( implStr == "IReturnVoid" )
@@ -357,6 +354,26 @@ private string AppendType(ref StringBuilderWrapper sb, MetadataType type, string
357354 return lastNS ;
358355 }
359356
357+ // Used in createResponse(){ return ... }
358+ // Needs to be typed erased
359+ private string GetReturnType ( string originalReturnType )
360+ {
361+ var returnType = ReturnTypeFilter ( originalReturnType ) ;
362+
363+ // This is to avoid invalid syntax such as "return new string()"
364+ TypeScriptGenerator . primitiveDefaultValues . TryGetValue ( returnType , out var replaceReturnType ) ;
365+
366+ if ( returnType == "any" )
367+ replaceReturnType = "{}" ;
368+ else if ( returnType . EndsWith ( "[]" ) )
369+ replaceReturnType = "[]" ;
370+ else if ( returnType . StartsWith ( "{" ) ) // { [name:K]: V }
371+ replaceReturnType = "{}" ;
372+
373+ var responseName = replaceReturnType ?? $ "new { returnType } ()";
374+ return responseName ;
375+ }
376+
360377 public static string CreateEmptyClass ( string name ) => "var " + name + @" = /** @class */ (function () {
361378 function " + name + @"() {
362379 }
0 commit comments