export type DisposeCallback = ( ...args: DisposeArgs ) => DisposeReturn; export type DisposableContext< DisposableArgs extends unknown[] = [], DisposeArgs extends unknown[] = [], DisposeReturn = void > = (...args: DisposableArgs) => DisposeCallback; export const disposable = < DisposableArgs extends unknown[], DisposeArgs extends unknown[] = [], DisposeReturn = void >( context: DisposableContext ) => context;