Model queued work as typed data before replaying each queue step.

Typed Event Queue

typed_event_queue.ts
type QueueEvent = {
    name: "read" | "audit" | "write" | "render";
    cost: number;
};

const extra: QueueEvent["name"] = ;
const queue: QueueEvent[] = [
    { name: "read", cost: 1 },
    { name: extra, cost: 2 },
    { name: "write", cost: 3 }
];

let log: string[] = [];
let totalCost: number = 0;

while (queue.length > 0) {
    const event: QueueEvent | undefined = queue.shift();

    if (event !== undefined) {
        totalCost += event.cost;
        log.push(`run:${event.name}`);
    }
}

console.log(`extra=${extra}`);
console.log(`log=${log.join(",")}`);
console.log(`total=${totalCost}`);
type QueueEvent = {
    name: "read" | "audit" | "write" | "render";
    cost: number;
};

const extra: QueueEvent["name"] = ;
const queue: QueueEvent[] = [
    { name: "read", cost: 1 },
    { name: extra, cost: 2 },
    { name: "write", cost: 3 }
];

let log: string[] = [];
let totalCost: number = 0;

while (queue.length > 0) {
    const event: QueueEvent | undefined = queue.shift();

    if (event !== undefined) {
        totalCost += event.cost;
        log.push(`run:${event.name}`);
    }
}

console.log(`extra=${extra}`);
console.log(`log=${log.join(",")}`);
console.log(`total=${totalCost}`);
type QueueEvent = {
    name: "read" | "audit" | "write" | "render";
    cost: number;
};

const extra: QueueEvent["name"] = ;
const queue: QueueEvent[] = [
    { name: "read", cost: 1 },
    { name: extra, cost: 2 },
    { name: "write", cost: 3 }
];

let log: string[] = [];
let totalCost: number = 0;

while (queue.length > 0) {
    const event: QueueEvent | undefined = queue.shift();

    if (event !== undefined) {
        totalCost += event.cost;
        log.push(`run:${event.name}`);
    }
}

console.log(`extra=${extra}`);
console.log(`log=${log.join(",")}`);
console.log(`total=${totalCost}`);
typed queue A queue can be replayed without timers when each queued event is represented as deterministic typed data.