dequeue() {
		const result = this._iterator.next();
		if (result.done) {
			if (this._set.size > 0) {
				this._iterator = this._set[Symbol.iterator]();
				const value =
					/** @type {[T, V, ...EXPECTED_ANY]} */
					(this._iterator.next().value);
				this._set.delete(...value);
				return value;
			}
			return;
		}
		this._set.delete(.../** @type {[T, V, ...EXPECTED_ANY]} */ (result.value));
		return result.value;
	}
Retrieves and removes the head of this queue.
@returns {[T, V, ...EXPECTED_ANY] | undefined} The head of the queue of `undefined` if this queue is empty.