//// [recursiveTypesUsedAsFunctionParameters.ts] class List { data: T; next: List>; } class MyList { data: T; next: MyList>; } function foo(x: List); function foo(x: List); // error, duplicate function foo(x: List) { } function foo2(x: List); function foo2(x: MyList); // ok, nominally compared with first overload function foo2(x: any) { } function other, U>() { // error but wrong error // BUG 838247 function foo3(x: T); function foo3(x: MyList) { } // should be error // BUG 838247 function foo4(x: T); function foo4(x: List) { } // ok function foo5(x: T): string; function foo5(x: List): number; function foo5(x: MyList): boolean; function foo5(x: any): any { return null; } var list: List; var myList: MyList; var r = foo5(list); var r2 = foo5(myList); } //// [recursiveTypesUsedAsFunctionParameters.js] var List = (function () { function List() { } return List; })(); var MyList = (function () { function MyList() { } return MyList; })(); function foo(x) { } function foo2(x) { } function other() { function foo3(x) { } function foo4(x) { } function foo5(x) { return null; } var list; var myList; var r = foo5(list); var r2 = foo5(myList); }