UNPKG

ts-sum-types

Version:

Algebraic sum types for TypeScript, designed after Rust's enums

10 lines (9 loc) 575 B
import { TagType, TagArrayMap } from './util'; import { Variant } from './variant'; import { ValueFactory } from './valueFactory'; export interface VariantFactory<Tag extends TagType, ArgsMap extends TagArrayMap<Tag>, ValueMap extends TagArrayMap<Tag>> { (...args: ArgsMap[Tag]): Variant<{ [a_Tag in Tag]: ValueMap[a_Tag]; }>; } export declare function VariantFactory<Tag extends TagType, Args extends unknown[], Value extends unknown[]>(tag: Tag, fn: ValueFactory<Args, Value>): VariantFactory<Tag, TagArrayMap<Tag, Args>, TagArrayMap<Tag, Value>>;