What enum should've been
type Literal = string | number | symbol | {}
const Literal = <T extends Literal>(val: T) => val
const Variants = <T extends Literal[]>(...variants: T) => variants
type Variants<T extends Literal[]> = T[number]
const Enum = Variants('a', 'b', {a: Literal('b')})
type Enum = Variants<typeof Enum>