=== tests/cases/compiler/functionOverloads38.ts === function foo(bar:{a:number;}[]):string; >foo : { (bar: { a: number; }[]): string; (bar: { a: boolean; }[]): number; }, Symbol(foo, Decl(functionOverloads38.ts, 0, 0), Decl(functionOverloads38.ts, 0, 39), Decl(functionOverloads38.ts, 1, 40)) >bar : { a: number; }[], Symbol(bar, Decl(functionOverloads38.ts, 0, 13)) >a : number, Symbol(a, Decl(functionOverloads38.ts, 0, 18)) function foo(bar:{a:boolean;}[]):number; >foo : { (bar: { a: number; }[]): string; (bar: { a: boolean; }[]): number; }, Symbol(foo, Decl(functionOverloads38.ts, 0, 0), Decl(functionOverloads38.ts, 0, 39), Decl(functionOverloads38.ts, 1, 40)) >bar : { a: boolean; }[], Symbol(bar, Decl(functionOverloads38.ts, 1, 13)) >a : boolean, Symbol(a, Decl(functionOverloads38.ts, 1, 18)) function foo(bar:{a:any;}[]):any{ return bar } >foo : { (bar: { a: number; }[]): string; (bar: { a: boolean; }[]): number; }, Symbol(foo, Decl(functionOverloads38.ts, 0, 0), Decl(functionOverloads38.ts, 0, 39), Decl(functionOverloads38.ts, 1, 40)) >bar : { a: any; }[], Symbol(bar, Decl(functionOverloads38.ts, 2, 13)) >a : any, Symbol(a, Decl(functionOverloads38.ts, 2, 18)) >bar : { a: any; }[], Symbol(bar, Decl(functionOverloads38.ts, 2, 13)) var x = foo([{a:1}]); >x : string, Symbol(x, Decl(functionOverloads38.ts, 3, 3)) >foo([{a:1}]) : string >foo : { (bar: { a: number; }[]): string; (bar: { a: boolean; }[]): number; }, Symbol(foo, Decl(functionOverloads38.ts, 0, 0), Decl(functionOverloads38.ts, 0, 39), Decl(functionOverloads38.ts, 1, 40)) >[{a:1}] : { a: number; }[] >{a:1} : { a: number; } >a : number, Symbol(a, Decl(functionOverloads38.ts, 3, 14)) >1 : number