Default parameter values let a function fill in a common value when the caller omits it.

default parameter A parameter with `= value` uses that value when no argument is provided.

Default Parameters

example
defaults.ts
Replay: real traced execution (multi-file project)
function makeLabel(text: string, prefix: string = "item"): string {
    return `${prefix}: ${text}`;
}

const labelText: string = "notebook";
const prefixText: string = "sku";

const defaultLabel: string = makeLabel(labelText);
const customLabel: string = makeLabel(labelText, prefixText);

console.log(defaultLabel);
console.log(customLabel);
function makeLabel(text: string, prefix: string = "item"): string {
    return `${prefix}: ${text}`;
}

const labelText: string = "marker";
const prefixText: string = "sku";

const defaultLabel: string = makeLabel(labelText);
const customLabel: string = makeLabel(labelText, prefixText);

console.log(defaultLabel);
console.log(customLabel);
function makeLabel(text: string, prefix: string = "item"): string {
    return `${prefix}: ${text}`;
}

const labelText: string = "eraser";
const prefixText: string = "sku";

const defaultLabel: string = makeLabel(labelText);
const customLabel: string = makeLabel(labelText, prefixText);

console.log(defaultLabel);
console.log(customLabel);
function makeLabel(text: string, prefix: string = "item"): string {
    return `${prefix}: ${text}`;
}

const labelText: string = "notebook";
const prefixText: string = "tag";

const defaultLabel: string = makeLabel(labelText);
const customLabel: string = makeLabel(labelText, prefixText);

console.log(defaultLabel);
console.log(customLabel);
function makeLabel(text: string, prefix: string = "item"): string {
    return `${prefix}: ${text}`;
}

const labelText: string = "notebook";
const prefixText: string = "bin";

const defaultLabel: string = makeLabel(labelText);
const customLabel: string = makeLabel(labelText, prefixText);

console.log(defaultLabel);
console.log(customLabel);
  1. labelText ← notebook, prefixText ← sku

    2    return `${prefix}: ${text}`;3}45const labelText→ notebook: string = "notebook";  //@labelText="marker", "eraser"6const prefixText→ sku: string = "sku";  //@prefixText="tag", "bin"78const defaultLabel: string = makeLabel(labelTextnotebook);9const customLabel: string = makeLabel(labelText, prefixText);
  2. function makeLabel(text: string, prefix: string = "item"): string

    pass 1 of 2
    1function makeLabel(textnotebook: string, prefixitem: string = "item"): string {2    return `${prefixitem}: ${textnotebook}`;3}
  3. defaultLabel ← item: notebook

    5const labelText: string = "notebook";  //@labelText="marker", "eraser"6const prefixText: string = "sku";  //@prefixText="tag", "bin"78const defaultLabel→ item: notebook: string = makeLabel(labelTextnotebook);9const customLabel: string = makeLabel(labelTextnotebook, prefixTextsku);
  4. function makeLabel(text: string, prefix: string = "item"): string

    pass 2 of 2
    1function makeLabel(textnotebook: string, prefixsku: string = "item"): string {2    return `${prefixsku}: ${textnotebook}`;3}
  5. customLabel ← sku: notebook

    8const defaultLabel: string = makeLabel(labelText);9const customLabel→ sku: notebook: string = makeLabel(labelTextnotebook, prefixTextsku);1011console.log(defaultLabelitem: notebook);12console.log(customLabelsku: notebook);
    outputitem: notebook
    sku: notebook
  1. labelText ← marker, prefixText ← sku

    2    return `${prefix}: ${text}`;3}45const labelText→ marker: string = "marker";6const prefixText→ sku: string = "sku";78const defaultLabel: string = makeLabel(labelTextmarker);9const customLabel: string = makeLabel(labelText, prefixText);
  2. function makeLabel(text: string, prefix: string = "item"): string

    pass 1 of 2
    1function makeLabel(textmarker: string, prefixitem: string = "item"): string {2    return `${prefixitem}: ${textmarker}`;3}
  3. defaultLabel ← item: marker

    5const labelText: string = "marker";6const prefixText: string = "sku";78const defaultLabel→ item: marker: string = makeLabel(labelTextmarker);9const customLabel: string = makeLabel(labelTextmarker, prefixTextsku);
  4. function makeLabel(text: string, prefix: string = "item"): string

    pass 2 of 2
    1function makeLabel(textmarker: string, prefixsku: string = "item"): string {2    return `${prefixsku}: ${textmarker}`;3}
  5. customLabel ← sku: marker

    8const defaultLabel: string = makeLabel(labelText);9const customLabel→ sku: marker: string = makeLabel(labelTextmarker, prefixTextsku);1011console.log(defaultLabelitem: marker);12console.log(customLabelsku: marker);
    outputitem: marker
    sku: marker
  1. labelText ← eraser, prefixText ← sku

    2    return `${prefix}: ${text}`;3}45const labelText→ eraser: string = "eraser";6const prefixText→ sku: string = "sku";78const defaultLabel: string = makeLabel(labelTexteraser);9const customLabel: string = makeLabel(labelText, prefixText);
  2. function makeLabel(text: string, prefix: string = "item"): string

    pass 1 of 2
    1function makeLabel(texteraser: string, prefixitem: string = "item"): string {2    return `${prefixitem}: ${texteraser}`;3}
  3. defaultLabel ← item: eraser

    5const labelText: string = "eraser";6const prefixText: string = "sku";78const defaultLabel→ item: eraser: string = makeLabel(labelTexteraser);9const customLabel: string = makeLabel(labelTexteraser, prefixTextsku);
  4. function makeLabel(text: string, prefix: string = "item"): string

    pass 2 of 2
    1function makeLabel(texteraser: string, prefixsku: string = "item"): string {2    return `${prefixsku}: ${texteraser}`;3}
  5. customLabel ← sku: eraser

    8const defaultLabel: string = makeLabel(labelText);9const customLabel→ sku: eraser: string = makeLabel(labelTexteraser, prefixTextsku);1011console.log(defaultLabelitem: eraser);12console.log(customLabelsku: eraser);
    outputitem: eraser
    sku: eraser
  1. labelText ← notebook, prefixText ← tag

    2    return `${prefix}: ${text}`;3}45const labelText→ notebook: string = "notebook";6const prefixText→ tag: string = "tag";78const defaultLabel: string = makeLabel(labelTextnotebook);9const customLabel: string = makeLabel(labelText, prefixText);
  2. function makeLabel(text: string, prefix: string = "item"): string

    pass 1 of 2
    1function makeLabel(textnotebook: string, prefixitem: string = "item"): string {2    return `${prefixitem}: ${textnotebook}`;3}
  3. defaultLabel ← item: notebook

    5const labelText: string = "notebook";6const prefixText: string = "tag";78const defaultLabel→ item: notebook: string = makeLabel(labelTextnotebook);9const customLabel: string = makeLabel(labelTextnotebook, prefixTexttag);
  4. function makeLabel(text: string, prefix: string = "item"): string

    pass 2 of 2
    1function makeLabel(textnotebook: string, prefixtag: string = "item"): string {2    return `${prefixtag}: ${textnotebook}`;3}
  5. customLabel ← tag: notebook

    8const defaultLabel: string = makeLabel(labelText);9const customLabel→ tag: notebook: string = makeLabel(labelTextnotebook, prefixTexttag);1011console.log(defaultLabelitem: notebook);12console.log(customLabeltag: notebook);
    outputitem: notebook
    tag: notebook
  1. labelText ← notebook, prefixText ← bin

    2    return `${prefix}: ${text}`;3}45const labelText→ notebook: string = "notebook";6const prefixText→ bin: string = "bin";78const defaultLabel: string = makeLabel(labelTextnotebook);9const customLabel: string = makeLabel(labelText, prefixText);
  2. function makeLabel(text: string, prefix: string = "item"): string

    pass 1 of 2
    1function makeLabel(textnotebook: string, prefixitem: string = "item"): string {2    return `${prefixitem}: ${textnotebook}`;3}
  3. defaultLabel ← item: notebook

    5const labelText: string = "notebook";6const prefixText: string = "bin";78const defaultLabel→ item: notebook: string = makeLabel(labelTextnotebook);9const customLabel: string = makeLabel(labelTextnotebook, prefixTextbin);
  4. function makeLabel(text: string, prefix: string = "item"): string

    pass 2 of 2
    1function makeLabel(textnotebook: string, prefixbin: string = "item"): string {2    return `${prefixbin}: ${textnotebook}`;3}
  5. customLabel ← bin: notebook

    8const defaultLabel: string = makeLabel(labelText);9const customLabel→ bin: notebook: string = makeLabel(labelTextnotebook, prefixTextbin);1011console.log(defaultLabelitem: notebook);12console.log(customLabelbin: notebook);
    outputitem: notebook
    bin: notebook

Use Default, Then Override

  1. labelText starts as notebook.
  2. makeLabel(labelText) uses the default prefix item.
  3. prefixText is sku.
  4. makeLabel(labelText, prefixText) uses the custom prefix. | Call | Result | | --- | --- | | makeLabel("notebook") | item: notebook | | makeLabel("notebook", "sku") | sku: notebook | | makeLabel("marker", "tag") | tag: marker |

Exercise: defaults.ts

Call a label function once with its default prefix and once with a custom prefix