> I assume it could have been made implicit
Not quite. It gets ambiguous whether to wrap return or not. Example:
function foo(): Promise<number> { if (...) { return Promise.resolve(5) } ... }
async function foo(): Promise<number> { if (...) { return 5 } ... }