alm
Version:
The best IDE for TypeScript
31 lines (23 loc) • 695 B
text/typescript
export function dispose<T extends IDisposable>(...disposables: T[]): T;
export function dispose<T extends IDisposable>(disposables: T[]): T[];
export function dispose<T extends IDisposable>(...disposables: T[]): T[] {
const first = disposables[0];
if (Array.isArray(first)) {
disposables = first as any as T[];
}
disposables.forEach(d => d && d.dispose());
return [];
}
export abstract class Disposable implements IDisposable {
private _toDispose: IDisposable[];
constructor() {
this._toDispose = [];
}
public dispose(): void {
this._toDispose = dispose(this._toDispose);
}
protected _register<T extends IDisposable>(t:T): T {
this._toDispose.push(t);
return t;
}
}