unenum
Version: 
Universal ADT utilities for TypeScript.
18 lines (17 loc) • 1.62 kB
TypeScript
import type { Enum } from "./enum.js";
export declare function match<TEnum extends Enum.Any, TEnumMatcher extends EnumMatcher<TEnum>, TMatcher extends [TFallback] extends [never] ? TEnumMatcher : Partial<TEnumMatcher>, TFallback = never>(value: TEnum, matcher: TMatcher & {
    _?: TFallback;
}): ReturnTypeMatcher<TMatcher> | ReturnTypeFallback<TFallback>;
export declare function match_<TEnum extends Enum.Any<TDiscriminant>, TEnumMatcher extends EnumMatcher<TEnum, TDiscriminant>, TMatcher extends [TFallback] extends [never] ? TEnumMatcher : Partial<TEnumMatcher>, TFallback = never, TDiscriminant extends keyof TEnum & string = keyof TEnum & Enum.Discriminant.Default>(value: TEnum, discriminant: TDiscriminant, matcher: TMatcher & {
    _?: TFallback;
}): ReturnTypeMatcher<TMatcher> | ReturnTypeFallback<TFallback>;
type EnumMatcher<TEnum extends Enum.Any<TDiscriminant>, TDiscriminant extends keyof TEnum & string = keyof TEnum & Enum.Discriminant.Default> = {
    [Key in keyof Enum.Root<TEnum, TDiscriminant>]: Enum.Root<TEnum, TDiscriminant>[Key] extends true ? () => unknown : (value: Enum.Root<TEnum, TDiscriminant>[Key]) => unknown;
} | {
    [Key in keyof Enum.Root<TEnum, TDiscriminant>]: unknown;
};
type ReturnTypeMatcher<TMatcher extends Record<string, unknown>> = undefined extends TMatcher[Exclude<keyof TMatcher, "_">] ? never : {
    [Key in keyof TMatcher]: TMatcher[Key] extends (...args: any[]) => any ? ReturnType<TMatcher[Key]> : TMatcher[Key];
}[keyof TMatcher];
type ReturnTypeFallback<TFallback> = TFallback extends (...args: any[]) => any ? ReturnType<TFallback> : TFallback;
export {};