declare class Queue<ValueType> implements Iterable<ValueType> {
    /**
    The size of the queue.
    */
    readonly size: number;

    /**
    Tiny queue data structure.

    The instance is an [`Iterable`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols), which means you can iterate over the queue front to back with a β€œfor…of” loop, or use spreading to convert the queue to an array. Don't do this unless you really need to though, since it's slow.

    @example
    ```
    import Queue = require('yocto-queue');

    const queue = new Queue();

    queue.enqueue('πŸ¦„');
    queue.enqueue('🌈');

    console.log(queue.size);
    //=> 2

    console.log(...queue);
    //=> 'πŸ¦„ 🌈'

    console.log(queue.dequeue());
    //=> 'πŸ¦„'

    console.log(queue.dequeue());
    //=> '🌈'
    ```
    */
    constructor();

    [Symbol.iterator](): IterableIterator<ValueType>;

    /**
    Add a value to the queue.
    */
    enqueue(value: ValueType): void;

    /**
    Remove the next value in the queue.

    @returns The removed value or `undefined` if the queue is empty.
    */
    dequeue(): ValueType | undefined;

    /**
    Clear the queue.
    */
    clear(): void;
}

export = Queue;