ts-sum-types
Version:
Algebraic sum types for TypeScript, designed after Rust's enums
14 lines (13 loc) • 601 B
TypeScript
import { TagType, TagArrayMap } from './util';
import { Matchable } from './matchable';
export interface Variant<Map extends TagArrayMap> extends Matchable<Map> {
}
export declare class VariantClass<Tag extends TagType, Map extends TagArrayMap<Tag>> implements Variant<Map> {
private readonly tag;
private readonly value;
constructor(tag: Tag, value: Map[Tag]);
match(fns: {
[a_Tag in Tag]: (...value: Map[a_Tag]) => void;
}): void;
}
export declare function Variant<Tag extends TagType, Map extends TagArrayMap<Tag>>(tag: Tag, value: Map[Tag]): Variant<Map>;