Review a generated API result renderer

from Union and intersection types
TypeScript 6 advanced 12 min 4 issues to find

Review this generated parser and renderer before it handles production API responses.

Validate untrusted JSON, require a label, never log tokens, preserve a legitimate zero value, and fail compilation when a union member is added without rendering logic.

TypeScript
type ApiResult =
  | { kind: "ok"; value: number; token: string }
  | { kind: "error"; message: string; token: string };

type Displayable = ApiResult & { label: string };

function parseResult(raw: string): Displayable {
  const parsed = JSON.parse(raw) as Displayable;
  return parsed;
}

function render(result: Displayable): string {
  console.log("result", JSON.stringify(result));

  switch (result.kind) {
    case "ok":
      if (!result.value) return `${result.label}:empty`;
      return `${result.label}:${result.value}`;
    case "error":
      return `${result.label}:${result.message}`;
    default:
      return "unknown";
  }
}

generated code is illustrative, not from any one model

Open in playground
Report an error