If you expect to color your functions async by default, it's really easy to turn a sync functuion into a near-zero-cost async, a Future that has already been resolved at construction time by calling the sync function.
This way, JS / TS becomes pretty comfortable. Except for stacktraces, of course.