sonhanguyen
9/24/2018 - 2:45 PM

What enum should've been

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>