export function defer void | Promise>( fn: T, ): T extends () => Promise ? { [Symbol.asyncDispose]: () => Promise } : { [Symbol.dispose]: () => void } { return { [Symbol.dispose]() { fn() }, [Symbol.asyncDispose]() { return Promise.resolve(fn()) }, } as any }