Review this generated router for untrusted event JSON.
Derive event and handler types from one payload map, validate incoming JSON, and route every supported event to a handler.
TypeScript
type EventPayloads = {
userDeleted: { userId: string };
creditIssued: { accountId: string; cents: number };
};
type AppEvent = {
[Kind in keyof EventPayloads]: {
type: Kind;
payload: EventPayloads[Kind];
};
}[keyof EventPayloads];
type Handlers = {
[Kind in keyof EventPayloads]: (payload: EventPayloads[Kind]) => void;
};
function parseEvent(raw: string): AppEvent {
return JSON.parse(raw) as AppEvent;
}
function dispatch(event: AppEvent, handlers: Partial<Handlers>): void {
const handler = handlers[event.type] as ((payload: unknown) => void) | undefined;
handler?.(event.payload);
}
generated code is illustrative, not from any one model