import { multimethodKey } from './multimethod'; declare type Class = new (...args: any[]) => T; export declare type Dispatch = (...args: any[]) => any; export declare type MethodEntry = [any, any]; export declare type MethodEntries = MethodEntry[]; export declare type DefaultMethod = ((arg0: any, arg1?: any) => any) | null; export declare type WildcardCaseEntry = { type: 'wildcard'; }; export declare type DataCaseEntry = { type: 'data'; value: any; }; export declare type ConstructorCaseEntry = { type: 'constructor'; value: new (...args: any[]) => Class; }; export declare type RegExpCaseEntry = { type: 'regexp'; value: RegExp; }; export declare type PredicateCaseEntry = { type: 'predicate'; value: (...args: any[]) => boolean; }; export declare type MixedCaseTypes = ConstructorCaseEntry | DataCaseEntry | RegExpCaseEntry | WildcardCaseEntry | PredicateCaseEntry; export declare type MixedCaseEntry = { type: 'mixed'; values: Array; }; export declare type CaseEntry = DataCaseEntry | ConstructorCaseEntry | RegExpCaseEntry | PredicateCaseEntry | MixedCaseEntry | WildcardCaseEntry; export declare type Internals = { methodEntries: MethodEntries; defaultMethod: DefaultMethod; dispatch: Dispatch; }; export declare type Multi = { [multimethodKey]: Internals; }; export declare type Multimethod = ((...args: any[]) => any) & Multi; export declare type MethodFn = (arg0: any, arg1?: any) => (multimethod: Multimethod) => Multimethod; export declare type MultiFn = (arg0?: Dispatch | MethodFn, ...methods: MethodFn[]) => Multimethod; export {};