interface Comparable { compareTo(other: T): number; } interface Comparer { >(x: T, y: T): T; } var max2: Comparer = (x, y) => { return (x.compareTo(y) > 0) ? x : y }; var maxResult = max2(1, 2);