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;