Config objects collect related options so function calls stay readable.

config object A config object passes named options into a function instead of relying on several positional arguments.

Config Objects

uppercase
config.ts
Replay: real traced execution (multi-file project)
type RenderConfig = {
    prefix: string;
    uppercase: boolean;
};

function renderName(name: string, config: RenderConfig): string {
    const value: string = config.uppercase ? name.toUpperCase() : name;
    return `${config.prefix}:${value}`;
}

const uppercase: boolean = false;
const config: RenderConfig = { prefix: "user", uppercase: uppercase };
const output: string = renderName("Ada", config);

console.log(output);
type RenderConfig = {
    prefix: string;
    uppercase: boolean;
};

function renderName(name: string, config: RenderConfig): string {
    const value: string = config.uppercase ? name.toUpperCase() : name;
    return `${config.prefix}:${value}`;
}

const uppercase: boolean = true;
const config: RenderConfig = { prefix: "user", uppercase: uppercase };
const output: string = renderName("Ada", config);

console.log(output);
  1. uppercase ← false, config ← [object Object]

    8    return `${config.prefix}:${value}`;9}1011const uppercase→ false: boolean = false;  //@uppercase=true12const config→ [object Object]: RenderConfig = { prefix: "user", uppercase: uppercasefalse };13const output: string = renderName("Ada", config[object Object]);
  2. value ← Ada

    3    uppercase: boolean;4};56function renderName(nameAda: string, config[object Object]: RenderConfig): string {7    const value→ Ada: string = config.uppercasefalse ? nameAda.toUpperCase() : name;8    return `${config.prefixuser}:${valueAda}`;9}
  3. output ← user:Ada

    11const uppercase: boolean = false;  //@uppercase=true12const config: RenderConfig = { prefix: "user", uppercase: uppercase };13const output→ user:Ada: string = renderName("Ada", config[object Object]);1415console.log(outputuser:Ada);
    outputuser:Ada
  1. uppercase ← true, config ← [object Object]

    8    return `${config.prefix}:${value}`;9}1011const uppercase→ true: boolean = true;12const config→ [object Object]: RenderConfig = { prefix: "user", uppercase: uppercasetrue };13const output: string = renderName("Ada", config[object Object]);
  2. value ← ADA

    3    uppercase: boolean;4};56function renderName(nameAda: string, config[object Object]: RenderConfig): string {7    const value→ ADA: string = config.uppercasetrue ? nameAda.toUpperCase() : name;8    return `${config.prefixuser}:${valueADA}`;9}
  3. output ← user:ADA

    11const uppercase: boolean = true;12const config: RenderConfig = { prefix: "user", uppercase: uppercase };13const output→ user:ADA: string = renderName("Ada", config[object Object]);1415console.log(outputuser:ADA);
    outputuser:ADA