Earlier quoted context omitted.
Unfortunately, even with fp-ts, typescript does not yet have the means to enable ergonomic handling of errors without exceptions. I hope they improve this in the future though.
As a daily fp-ts user I'm not sure I agree, you handle them with the appropriate data type: Either. Exceptions are a path like any other, there's nothing really magical about those, you catch the functions that could throw and handle the fact they have thrown the error, which error, why? There's two helpers for that in fp-ts [1][2] plus the obvious lazy and asynchronous counter parts in the TaskEither and ReaderTaskE…
That being said, I think the authors did a great job to make it as good as possible given the limitations.