I agree, that doesn't look bad. However, this type definition forces you to supply one argument per function call, which looks awful in JavaScript:
fn(1)(2)(3)
That's a big drawback for me. Libraries like Ramda allow one or more arguments per function call: fn(1, 2, 3) === fn(1, 2)(3) === fn(1)(2, 3)
That's what makes the verbosity unbearable, as each type of call needs its own type.