declare class Args {
  _input: string[];
  constructor(input?: string[]);
  hasKey(x: string): boolean;
  isOn(key: string): boolean;
  isOff(key: string): boolean;
  isExplicitlyOff(key: string): boolean;
  getValue(key: string | string[], fallback: string): string;
  getValue(key: string | string[]): string | undefined;
  getValues(key: string | string[], fallback: string[]): string[];
  getValues(key: string | string[]): string[] | undefined;
}

declare const args: Args;

declare function getValue(key: string | string[], fallback: string): string;
declare function getValue(key: string | string[]): string | undefined;

declare function getValues(key: string | string[], fallback: string[]): string[];
declare function getValues(key: string | string[]): string[] | undefined;

declare function hasKey(x: string): boolean;

type Off = false | 0 | null | undefined | "0" | "false" | "undefined" | "off";

type ExplicitlyOff = Exclude<Off, undefined | "undefined">;

declare function isExplicitlyOff(x: unknown): x is ExplicitlyOff;

declare function isKey(x: string): boolean;

declare function isOff(x: unknown): x is Off;

type On = true | 1 | "true" | "1" | "on";

declare function isOn(x: unknown): x is On;

type ArgMap = Record<string, string>;
declare function parseArgs<T extends Record<string, unknown> = Record<string, unknown>>(map?: ArgMap): T;
declare function parseArgs<T extends Record<string, unknown> = Record<string, unknown>>(input?: string | string[], map?: ArgMap): T;

export { ArgMap, Args, ExplicitlyOff, Off, On, args, getValue, getValues, hasKey, isExplicitlyOff, isKey, isOff, isOn, parseArgs };
