interface Collection { length: number; add(x: T, y: U): void; remove(x: T, y: U): boolean; } interface Combinators { map(c: Collection, f: (x: T, y: U) => any): Collection; map(c: Collection, f: (x: T, y: U) => V): Collection; } var _: Combinators; var c2: Collection; var rf1 = (x: number, y: string) => { return x.toFixed() }; var r5a = _.map(c2, (x, y) => { return x.toFixed() }); var r5b = _.map(c2, rf1);