Underscore: removing generics and overloading reduce

What was the advantage of typing things with "U extends {}" ?

And for reduce, the memo argument is not optional if T doesn't equal TResult since then the first element of the list is the wrong type to be used as a replacement. Not sure if this minor point is worth adding almost a hundred lines though.