import type { TT$ } from './types'; declare type IfChainedValue = V | ((data?: D) => V); declare type IfChainedCondition = IfChainedValue>; declare type CallableValue = { callable: () => T; }; declare type Selector = { if?: IfChainedCondition; then: T | CallableValue; else?: E | CallableValue; next?: N; }; declare type IfChainedSelector = IfChainedValue>; declare type Ex, K> = K extends keyof S ? K extends 'then' ? S[K] extends CallableValue ? ReturnType : S[K] : K extends 'else' ? S[K] extends CallableValue ? ReturnType : S[K] : S[K] : never; declare type ExtractS, K extends keyof Selector> = S extends (...args: any) => any ? Ex, K> : S extends Selector ? Ex : never; export declare type IfChainedNext = { next: Done extends true ? never : >(selector: S) => IfChainedNext<[ ExtractS ] extends [never] ? D : ExtractS, V | ExtractS | ExtractS, Done extends true ? Done : S extends { else: any; } ? true : false>; value: V; }; export declare type IfChained = (data?: D) => { next: >(selector: S) => IfChainedNext | ExtractS, S extends { else: any; } ? true : false>; }; export declare const ifChained: IfChained; export declare const ifThen: IfChained; declare type Condition = { if?: TT$; then: T | CallableValue; else?: E | CallableValue; }; export declare const ifthen: >(condition: C) => ExtractS | ExtractS; export {};