import { OptionDefinition as ArgsOptionDefinition } from 'command-line-args'; import { OptionDefinition as UsageOptionDefinition } from 'command-line-usage'; import { GENERAL_OPTION_LIST } from '../generalCommand'; export type ICommandOption = Readonly; export type OptionList = Readonly; type GetNumberTypeByConstructor = T extends NumberConstructor ? number : unknown; type GetNumOrStrTypeByConstructor = T extends StringConstructor ? string : GetNumberTypeByConstructor; type GetTypeByConstructor = T extends BooleanConstructor ? boolean : GetNumOrStrTypeByConstructor; type ArrayIfMultiple = O extends { multiple: true; } ? T[] : T; type OptionListWithGeneral
    = [...typeof GENERAL_OPTION_LIST, ...OL]; export type CommandLineOptions
      = { [P in OptionListWithGeneral
        [number]['name']]: ArrayIfMultiple[number], { name: P; }>, GetTypeByConstructor[number], { name: P; }>['type']>> | undefined; }; export type ICommand = { name: N; description: string; optionList: OL; commands: ICommand[]; run(options: CommandLineOptions
          ): Promise; }; export declare function createCommandDefinition, N extends string, OL extends Readonly[]>>(def: C): C; export {};