UNPKG

unenum

Version:

Universal ADT utilities for TypeScript.

18 lines (17 loc) 1.62 kB
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 {};