declare type PredicateFunction = (arg: T) => boolean; declare type ArgumentOptions = { inverseMatch?: boolean; }; declare class BaseArgument { private _description; private _matchingFunction; private _options?; constructor(_description: string, _matchingFunction: PredicateFunction, _options?: ArgumentOptions); matches(arg: T): boolean; toString(): string; } export declare class Argument extends BaseArgument { private readonly _type; constructor(description: string, matchingFunction: PredicateFunction, options?: ArgumentOptions); get type(): 'SingleArgument'; } export declare class AllArguments extends BaseArgument { private readonly _type; constructor(); get type(): 'AllArguments'; } export declare namespace Arg { type ExtractFirstArg = T extends AllArguments ? TArgs[0] : T; type ReturnArg = Argument & T; type Inversable = T & { not: T; }; export const all: () => AllArguments; type Is = (predicate: PredicateFunction>) => ReturnArg>; export const is: Inversable; type MapAnyReturn = T extends 'any' ? ReturnArg : T extends 'string' ? ReturnArg : T extends 'number' ? ReturnArg : T extends 'boolean' ? ReturnArg : T extends 'symbol' ? ReturnArg : T extends 'undefined' ? ReturnArg : T extends 'object' ? ReturnArg : T extends 'function' ? ReturnArg : T extends 'array' ? ReturnArg : any; type AnyType = 'string' | 'number' | 'boolean' | 'symbol' | 'undefined' | 'object' | 'function' | 'array' | 'any'; type Any = (type?: T) => MapAnyReturn; export const any: Inversable; export {}; } export {};