export declare type CommandSpec any, P extends (args: string[]) => any> = { name: N; description?: string; version?: string; usage?: string; flag?: F; positionalArguments?: P; handler?: F extends (args: string[]) => infer V ? P extends (args: string[]) => infer U ? (args: U, flags: V, helpFn?: Function, metaInfo?: { spec?: CommandSpec; rawArgs?: string[]; }) => any : never : never; }; export declare type Command = (args: string[], parentOpts?: { commandNamePosition?: number; spec?: CommandSpec; }) => any; export declare const makeSubCommandNameArgument: (...names: string[]) => (v: string[]) => { COMMAND_NAME: { value: string; position: number[]; usage: string; }; }; export declare function makeCommand any, P extends (args: string[]) => any>(spec: CommandSpec, showHelp?: import("./help").HelpFunction): Command; export declare function makeSubCommandHandler(...commands: { name: string; command: Command; }[]): (args: any, _: any, helpFn: any, { spec, rawArgs }: { spec: any; rawArgs: any; }) => void;