( fn: T, )
| 1 | export function defer<T extends () => void | Promise<void>>( |
| 2 | fn: T, |
| 3 | ): T extends () => Promise<void> ? { [Symbol.asyncDispose]: () => Promise<void> } : { [Symbol.dispose]: () => void } { |
| 4 | return { |
| 5 | [Symbol.dispose]() { |
| 6 | fn() |
| 7 | }, |
| 8 | [Symbol.asyncDispose]() { |
| 9 | return Promise.resolve(fn()) |
| 10 | }, |
| 11 | } as any |
| 12 | } |