ts-sum-types
Version:
Algebraic sum types for TypeScript, designed after Rust's enums
10 lines (9 loc) • 628 B
TypeScript
import { TagType, TagArrayMap } from './util';
import { ValueFactory } from './valueFactory';
import { VariantFactory } from './variantFactory';
export declare type SumType<Tag extends TagType, ArgsMap extends TagArrayMap<Tag>, ValueMap extends TagArrayMap<Tag>> = {
[a_Tag in Tag]: VariantFactory<a_Tag, TagArrayMap<a_Tag, ArgsMap[a_Tag]>, TagArrayMap<a_Tag, ValueMap[a_Tag]>>;
};
export declare function SumType<Tag extends TagType, ArgsMap extends TagArrayMap<Tag>, ValueMap extends TagArrayMap<Tag>>(map: {
[a_Tag in Tag]: ValueFactory<ArgsMap[a_Tag], ValueMap[a_Tag]>;
}): SumType<Tag, ArgsMap, ValueMap>;