interface SemaphoreInterface { acquire(): Promise<[number, SemaphoreInterface.Releaser]>; runExclusive(callback: SemaphoreInterface.Worker): Promise; waitForUnlock(): Promise; isLocked(): boolean; /** @deprecated Deprecated in 0.3.0, will be removed in 0.4.0. Use runExclusive instead. */ release(): void; cancel(): void; } declare namespace SemaphoreInterface { interface Releaser { (): void; } interface Worker { (value: number): Promise | T; } } export default SemaphoreInterface;