/** * Interface for objects to have resources to cleanup */ export interface IDisposable { dispose(); } /** * Extension to use using statement with IDisposable * * Excample: * using(new AnyClass(), (instance) => { * instance.doAnything(); * }); */ export function using(resource: T, func: (resource: T) => void) { try { func(resource); } catch (error) { resource.dispose(); throw error; } }