declare function fastq(context: C, worker: fastq.worker, concurrency: number): fastq.queue declare function fastq(worker: fastq.worker, concurrency: number): fastq.queue declare namespace fastq { type worker = (this: C, task: T, cb: fastq.done) => void type asyncWorker = (this: C, task: T) => Promise type done = (err: Error | null, result?: R) => void type errorHandler = (err: Error, task: T) => void interface queue { push(task: T, done?: done): void unshift(task: T, done?: done): void pause(): any resume(): any idle(): boolean length(): number getQueue(): T[] kill(): any killAndDrain(): any error(handler: errorHandler): void concurrency: number drain(): any empty: () => void saturated: () => void } interface queueAsPromised extends queue { push(task: T): Promise } function promise(context: C, worker: fastq.asyncWorker, concurrency: number): fastq.queueAsPromised function promise(worker: fastq.asyncWorker, concurrency: number): fastq.queueAsPromised } export = fastq