UNPKG

switch-functional

Version:
23 lines (22 loc) 2.15 kB
import type { AnyConditions, AnyReturnValues, FinalReturnValue, Input, Options, Resolved, ReturnValue, Switch } from './types.js'; /** * Return value of `switchFunctional()` and `switchFunctional.case()` */ export declare const chain: <FinalReturnValues extends FinalReturnValue = never>(resolved: Resolved, finalValue?: FinalReturnValues) => <OriginalInput extends Input, CustomCondition = never, CustomReturnValues extends readonly unknown[] = never, StrictReturnValue extends ReturnValue<OriginalInput> = never>(input: OriginalInput, options?: Options<CustomCondition, CustomReturnValues, OriginalInput, StrictReturnValue>) => { /** * If the `input` matches the `conditions`, the final return value will be * `caseReturnValue`. * * `caseReturnValue` can optionally be a function taking the `input` as * argument. */ case: <NewReturnValue extends ReturnValue<OriginalInput> = never>(conditions: AnyConditions<CustomCondition, OriginalInput>, ...caseReturnValues: AnyReturnValues<CustomReturnValues, OriginalInput, NewReturnValue>) => Switch<FinalReturnValues | ((NewReturnValue[] extends never[] ? StrictReturnValue : NewReturnValue) extends infer T ? T extends (NewReturnValue[] extends never[] ? StrictReturnValue : NewReturnValue) ? T extends (...args: readonly never[]) => unknown ? ReturnType<T> : T : never : never), CustomCondition, CustomReturnValues, OriginalInput, StrictReturnValue>; /** * If one of the `.case()` statements matched, returns its * `caseReturnValue`. Else, returns `defaultReturnValue`. * * `defaultReturnValue` can optionally be a function taking the `input` as * argument. */ default: <NewReturnValue extends ReturnValue<OriginalInput> = never>(...defaultReturnValues: AnyReturnValues<CustomReturnValues, OriginalInput, NewReturnValue>) => NonNullable<FinalReturnValues> | ((NewReturnValue[] extends never[] ? StrictReturnValue : NewReturnValue) extends infer T ? T extends (NewReturnValue[] extends never[] ? StrictReturnValue : NewReturnValue) ? T extends (...args: readonly never[]) => unknown ? ReturnType<T> : T : never : never); };