# types/invocation.types.ts

> 28 lines of code and 5 definitions.

Tree: Argv Contract
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/argv#file-argv-types-invocation-types-ts
Source text: https://banes-lab.com/source/argv/types/invocation.types.ts.txt

Listed in [types](https://banes-lab.com/api/source/argv/types.md).

## Definitions

- `FlagSpec` (interface_declaration, line 1, exported)
- `PositionalSpec` (interface_declaration, line 8, exported)
- `ArgvSpec` (interface_declaration, line 15, exported)
- `ParsedArgv` (interface_declaration, line 23, exported)
- `ArgvOutcome` (type_alias_declaration, line 29, exported)

## Contained in

- [types](https://banes-lab.com/anatomy/argv/folder-argv-types.md)

## Source

```typescript
export interface FlagSpec {
    readonly describe: string;
    readonly name: string;
    readonly repeatable?: boolean;
    readonly takesValue: boolean;
}

export interface PositionalSpec {
    readonly describe: string;
    readonly name: string;
    readonly optional?: boolean;
    readonly variadic?: boolean;
}

export interface ArgvSpec {
    readonly command: string;
    readonly flags: readonly FlagSpec[];
    readonly positionals?: readonly PositionalSpec[];
    readonly rest?: PositionalSpec;
    readonly summary: string;
}

export interface ParsedArgv {
    readonly flags: ReadonlyMap<string, readonly string[]>;
    readonly positionals: readonly string[];
    readonly rest: readonly string[];
}

export type ArgvOutcome =
    | { readonly kind: "help"; readonly usage: string }
    | { readonly kind: "parsed"; readonly argv: ParsedArgv }
    | { readonly kind: "refused"; readonly reason: string; readonly usage: string };
```
