import type {LiteralUnion} from 'type-fest';
type A = CollapseLiterals<'foo' | 'bar' | (string & {})>;
//=> string
type B = CollapseLiterals<LiteralUnion<1 | 2 | 3, number>>;
//=> number
type C = CollapseLiterals<LiteralUnion<'onClick' | 'onChange', `on${string}`>>;
//=> `on${string}`
type D = CollapseLiterals<'click' | 'change' | (`on${string}` & {})>;
//=> 'click' | 'change' | `on${string}`
type E = CollapseLiterals<LiteralUnion<'foo' | 'bar', string> | null | undefined>;
//=> string | null | undefined
Collapses literal types in a union into their corresponding primitive types, when possible. For example,
CollapseLiterals<'foo' | 'bar' | (string & {})>returnsstring.Note: This doesn't collapse literals within tagged types. For example,
CollapseLiterals<Tagged<'foo' | (string & {}), 'Tag'>>returns("foo" & Tag<"Tag", never>) | (string & Tag<"Tag", never>)and notstring & Tag<"Tag", never>.Use-case: For collapsing unions created using LiteralUnion.