25 lines
768 B
TypeScript
25 lines
768 B
TypeScript
/**
|
|
* Compile-time guard for BillingPaymentMethod.
|
|
*
|
|
* There is nothing to run here — the point is that `tsc` accepts this file.
|
|
* An earlier revision typed the fallback arm's `kind` as `string & {}`, which
|
|
* makes the discriminant non-literal and silently defeats narrowing for every
|
|
* arm: the `pm.brand` read below stops compiling. Keeping this file honest
|
|
* keeps `kind` narrowable.
|
|
*/
|
|
|
|
import type { BillingPaymentMethod } from './billing-types'
|
|
|
|
export function describePaymentMethod(pm: BillingPaymentMethod): string {
|
|
switch (pm.kind) {
|
|
case 'card':
|
|
return pm.wallet ? `${pm.wallet} ${pm.brand} ${pm.last4}` : `${pm.brand} ${pm.last4}`
|
|
|
|
case 'link':
|
|
return pm.email ?? 'Link'
|
|
|
|
case 'unknown':
|
|
return pm.raw_kind
|
|
}
|
|
}
|