//// [functionOverloadsRecursiveGenericReturnType.ts] class B{ private id: V; } class A{ GetEnumerator: () => B; } function Choice(args: T[]): A; function Choice(...v_args: T[]): A; function Choice(...v_args: any[]): A{ return new A(); } //// [functionOverloadsRecursiveGenericReturnType.js] var B = (function () { function B() { } return B; })(); var A = (function () { function A() { } return A; })(); function Choice() { var v_args = []; for (var _i = 0; _i < arguments.length; _i++) { v_args[_i - 0] = arguments[_i]; } return new A(); }