All files / enum enum-literal.ts

0% Statements 0/0
0% Branches 0/0
0% Functions 0/0
0% Lines 0/0

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15                             
/**
 * Turns an enum type into the union of its literal values, so plain literals are accepted where the enum is
 * expected: `'idle' | 'running'` for a string enum, `0 | 1` for a numeric one.
 *
 * @template E - The enum type, such as `Status` (not `typeof Status`).
 * @example
 * enum Status { Idle = 'idle', Running = 'running' }
 * type StatusValue = EnumLiteral<Status>; // 'idle' | 'running'
 */
export type EnumLiteral<E extends number | string> = E extends string
  ? `${E}`
  : `${E}` extends `${infer N extends number}`
    ? N
    : never;