UNPKG

@consolidados/results

Version:
46 lines (43 loc) 1.97 kB
import { R as Result, O as Option } from '../option-B_KKIecf.js'; type PrimitiveMembers<T> = Extract<T, PropertyKey>; type ObjectKeys<T> = T extends object ? keyof T : never; type ObjectPropertyType<T, K extends PropertyKey> = T extends object ? K extends keyof T ? T[K] : never : never; type HandlerFor<T, K extends PropertyKey, R> = K extends PrimitiveMembers<T> ? () => R : K extends ObjectKeys<T> ? (value: ObjectPropertyType<T, K>) => R : never; type MatchCases<T, R, HasDefault extends boolean = false> = (HasDefault extends true ? Partial<{ [K in PrimitiveMembers<T> | ObjectKeys<T>]: HandlerFor<T, K, R>; }> : { [K in PrimitiveMembers<T> | ObjectKeys<T>]: HandlerFor<T, K, R>; }) & (HasDefault extends true ? { default: () => R; } : {}); declare function match<T, E, ROk, RErr>(matcher: Result<T, E>, cases: { Ok: (value: T) => ROk; Err: (error: E) => RErr; }): ROk | RErr; declare function match<T, RSome, RNone>(matcher: Option<T>, cases: { Some: (value: T) => RSome; None: () => RNone; }): RSome | RNone; declare function match<T extends PropertyKey | object, R>(matcher: T, cases: MatchCases<T, R, true>): R; declare function match<T extends PropertyKey | object, R>(matcher: T, cases: MatchCases<T, R, false>): R; declare function match<T extends { [K in D]: string | number | symbol; }, D extends keyof T, R>(matcher: T, cases: { [K in T[D]]?: (value: Extract<T, { [P in D]: K; }>) => R; } & { default: (value: T) => R; }, discriminant: D): R; declare function match<T extends { [K in D]: string | number | symbol; }, D extends keyof T, R>(matcher: T, cases: { [K in T[D]]: (value: Extract<T, { [P in D]: K; }>) => R; }, discriminant: D): R; declare function match<T extends PropertyKey, R>(matcher: T, cases: Partial<Record<T, () => R>> & { default: () => R; }): R; declare function match<T extends PropertyKey, R>(matcher: T, cases: Record<T, () => R>): R; export { match };