Command-line arguments can be parsed into a small options object before script logic runs.

cli options Parsing arguments once gives the rest of a script named booleans and values instead of raw strings.

CLI Argument Parse

modeFlag
cli.ts
Replay: real traced execution (multi-file project)
type ScriptOptions = {
    write: boolean;
    target: string;
};

function parseArgs(args: string[]): ScriptOptions {
    return {
        write: args.includes("--write"),
        target: args[args.length - 1]
    };
}

const modeFlag: string = "--dry-run";
const args: string[] = [modeFlag, "dist"];
const options: ScriptOptions = parseArgs(args);

console.log(`${options.target}:${options.write ? "write" : "preview"}`);
type ScriptOptions = {
    write: boolean;
    target: string;
};

function parseArgs(args: string[]): ScriptOptions {
    return {
        write: args.includes("--write"),
        target: args[args.length - 1]
    };
}

const modeFlag: string = "--write";
const args: string[] = [modeFlag, "dist"];
const options: ScriptOptions = parseArgs(args);

console.log(`${options.target}:${options.write ? "write" : "preview"}`);
  1. modeFlag ← --dry-run, args ← --dry-run,dist

    10    };11}1213const modeFlag→ --dry-run: string = "--dry-run";  //@modeFlag="--write"14const args→ --dry-run,dist: string[] = [modeFlag--dry-run, "dist"];15const options: ScriptOptions = parseArgs(args--dry-run,dist);
  2. function parseArgs(args: string[]): ScriptOptions

    3    target: string;4};56function parseArgs(args--dry-run,dist: string[]): ScriptOptions {7    return {8        write: args--dry-run,dist.includes("--write"),9        target: args[args.length - 1]dist10    };11}
  3. options ← [object Object]

    13const modeFlag: string = "--dry-run";  //@modeFlag="--write"14const args: string[] = [modeFlag, "dist"];15const options→ [object Object]: ScriptOptions = parseArgs(args--dry-run,dist);1617console.log(`${options.targetdist}:${options.writefalse ? "write" : "preview"}`);
    outputdist:preview
  1. modeFlag ← --write, args ← --write,dist

    10    };11}1213const modeFlag→ --write: string = "--write";14const args→ --write,dist: string[] = [modeFlag--write, "dist"];15const options: ScriptOptions = parseArgs(args--write,dist);
  2. function parseArgs(args: string[]): ScriptOptions

    3    target: string;4};56function parseArgs(args--write,dist: string[]): ScriptOptions {7    return {8        write: args--write,dist.includes("--write"),9        target: args[args.length - 1]dist10    };11}
  3. options ← [object Object]

    13const modeFlag: string = "--write";14const args: string[] = [modeFlag, "dist"];15const options→ [object Object]: ScriptOptions = parseArgs(args--write,dist);1617console.log(`${options.targetdist}:${options.writetrue ? "write" : "preview"}`);
    outputdist:write