// Compile-time guard for the branded money types. Not imported anywhere (so it // never ships in a bundle); `npm run typecheck` type-checks it via the tsconfig // include, and each `@ts-expect-error` asserts the following line IS a genuine // type error. If the cents/dollars branding ever regresses, one of these lines // stops erroring and typecheck fails loudly ("unused @ts-expect-error"). import { formatUSD, formatCentsUSD, asCents, asDollars, centsToDollars } from './money'; const cents = asCents(1234); // $12.34 as integer cents const dollars = asDollars(12.34); // $12.34 as dollars // ✅ Correct unit → compiles fine. formatUSD(dollars); formatCentsUSD(cents); formatUSD(centsToDollars(cents)); // cross the boundary explicitly // ❌ Unit mixups → compile errors (the class of bug we keep fixing). // @ts-expect-error cents can't be formatted as dollars (would render 100× too big) formatUSD(cents); // @ts-expect-error dollars can't be formatted as cents formatCentsUSD(dollars); // @ts-expect-error a raw number must be branded (asDollars/asCents) first formatUSD(1234);