TypeScript 3.4 added const
assertions which allow for writing this as:
const fruits = ["Apple", "Orange", "Pear"] as const;
type Fruits = typeof fruits[number]; // "Apple" | "Orange" | "Pear"
With as const
TypeScript infers the type of fruits
above as readonly["Apple", "Orange", "Pear"]
. Previously, it would infer it as string[]
, preventing typeof fruits[number]
from producing the desired union type.