An event queue can be summarized by topic while preserving typed event fields.

Event Queue Case

events.ts
type QueueEvent = {
    topic: "build" | "deploy";
    priority: number;
};

function topicCount(events: QueueEvent[], topic: QueueEvent["topic"]): number {
    let count = 0;

    for (const event of events) {
        if (event.topic === topic) {
            count += 1;
        }
    }

    return count;
}

const selectedTopic: QueueEvent["topic"] = ;
const events: QueueEvent[] = [
    { topic: "build", priority: 2 },
    { topic: "deploy", priority: 1 },
    { topic: "build", priority: 3 }
];

const count: number = topicCount(events, selectedTopic);

console.log(`topic=${selectedTopic};count=${count}`);
type QueueEvent = {
    topic: "build" | "deploy";
    priority: number;
};

function topicCount(events: QueueEvent[], topic: QueueEvent["topic"]): number {
    let count = 0;

    for (const event of events) {
        if (event.topic === topic) {
            count += 1;
        }
    }

    return count;
}

const selectedTopic: QueueEvent["topic"] = ;
const events: QueueEvent[] = [
    { topic: "build", priority: 2 },
    { topic: "deploy", priority: 1 },
    { topic: "build", priority: 3 }
];

const count: number = topicCount(events, selectedTopic);

console.log(`topic=${selectedTopic};count=${count}`);
queue summary Counting selected events shows how a typed queue can feed a dashboard or worker.