> A caller can change sync function to async, breaking the functionality downstream.
I think you mean callee?
Are you taking about using a returned result? Because most languages permit ignoring return values.
If you want to check out promise use, check out https://tsetse.info/must-use-promises
Consider
``` const myIntValue = f(); ```
This code will silently break when f changes from sync to async.
const myIntValue = f() // Error TS2365: Operator '+' cannot be applied to types 'Promise<number>' and '2' const myResult = myIntValue + 2 async function f() { return 42 }