import { Logger } from './logger'; type BooleanOptionEntry = { alias?: string; description?: string; type: 'boolean'; }; type StringOptionEntry = { alias?: string; description?: string; defaultValue: string; type: 'string'; }; type OptionalStringOptionEntry = { alias?: string; description?: string; type: 'string'; }; type IntegerOptionEntry = { alias?: string; description?: string; defaultValue?: number; type: 'int'; }; type CommandLineOptionEntry = BooleanOptionEntry | StringOptionEntry | OptionalStringOptionEntry | IntegerOptionEntry; type OptionsHolder = { options: { [name: string]: CommandLineOptionEntry; }; }; export type CommandCliSetting = OptionsHolder & { description: string; }; type ParseOptions = { options: { [name: string]: CommandLineOptionEntry; }; commands: { [name: string]: CommandCliSetting; }; logger: Logger; }; type Dispatch = T extends BooleanOptionEntry ? boolean : T extends StringOptionEntry ? string : T extends OptionalStringOptionEntry ? string | undefined : T extends IntegerOptionEntry ? number : never; type OptionsResult = { [P in keyof T['options']]: Dispatch; }; export type CommandOptions = { _: string[]; options: OptionsResult; }; type ParseResult = { _: string[]; options: { [P in keyof T['options']]: Dispatch; }; command?: { [P in keyof T['commands']]?: CommandOptions; }; errors?: { unknownCommand?: string; }; availableCommandNames: () => string[]; showHelp: () => void; showCommandHelp: (commandName: string) => void; }; export declare function createParser(parseOptions: T): { parse: (rawArguments?: string[]) => ParseResult; }; export {};