Review a generated event router

from Advanced types
TypeScript 6 advanced 6 min 3 issues to find

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

Open in playground
Report an error