Probably something like this:
function* waitFor<T>(yieldExpr: () => Promise<T>): Generator<Promise<T>, T, T> {
const unwrapped = yield yieldExpr;
return unwrapped;
}
function* task() {
const x = yield* waitFor(() => Promise.resolve(5));
const y = yield* waitFor(() => Promise.resolve('hello'));
}
Probably something like this: