declare function arg( spec: T, options?: arg.Options ): arg.Result; declare namespace arg { export const flagSymbol: unique symbol; export function flag(fn: T): T & { [arg.flagSymbol]: true }; export const COUNT: Handler & { [arg.flagSymbol]: true }; export type Handler = ( value: string, name: string, previousValue?: T ) => T; export class ArgError extends Error { constructor(message: string, code: string); code: string; } export interface Spec { [key: string]: string | Handler | [Handler]; } export type Result = { _: string[] } & { [K in keyof T]?: T[K] extends Handler ? ReturnType : T[K] extends [Handler] ? Array> : never; }; export interface Options { argv?: string[]; permissive?: boolean; stopAtPositional?: boolean; } } export = arg;