UNPKG

@hazae41/box

Version:

Rust-like Box and similar objects for TypeScript

26 lines (23 loc) 992 B
import { Deferred, AsyncDeferred } from '../deferred/index.js'; declare class Disposer<T> implements Disposable { readonly value: T; readonly clean: Deferred; constructor(value: T, clean: Deferred); static wrap<T>(value: T, clean?: (value: T) => void): Disposer<T>; static from<T>(value: T & Disposable): Disposer<T & Disposable>; [Symbol.dispose](): void; [Symbol.asyncDispose](): Promise<void>; get(): T; await<T>(this: Disposer<Promise<T>>): Promise<T>; } declare class AsyncDisposer<T> implements AsyncDisposable { readonly value: T; readonly clean: AsyncDeferred; constructor(value: T, clean: AsyncDeferred); static wrap<T>(value: T, clean?: (value: T) => PromiseLike<void>): AsyncDisposer<T>; static from<T>(value: T & AsyncDisposable): AsyncDisposer<T & AsyncDisposable>; [Symbol.asyncDispose](): Promise<void>; get(): T; await<T>(this: AsyncDisposer<Promise<T>>): Promise<T>; } export { AsyncDisposer, Disposer };