Default parameters let you give a value to a function input if no value is provided. Adding types helps catch mistakes early.
Default parameters with types in Typescript
function functionName(paramName: type = defaultValue) { // function body }
The default value is used only if the caller does not provide that argument.
TypeScript checks that the default value matches the declared type.
function greet(name: string = "friend") { console.log(`Hello, ${name}!`); }
function multiply(x: number, y: number = 2): number { return x * y; }
function setFlag(flag: boolean = true) { console.log(`Flag is ${flag}`); }
This program shows how default parameters work with types. It prints details about a person. If no name or age is given, it uses default values.
function describePerson(name: string = "Unknown", age: number = 0) { console.log(`Name: ${name}, Age: ${age}`); } describePerson(); describePerson("Alice"); describePerson("Bob", 30);
Default parameters must come after required parameters in the function signature.
You can use any valid expression as a default value, not just constants.
Default parameters provide fallback values when arguments are missing.
Type annotations ensure the default value matches the expected type.
This makes functions safer and easier to use.
Practice
What is the main purpose of default parameters in TypeScript functions?
Solution
Step 1: Understand default parameters
Default parameters give a value to a function argument if no value is passed.Step 2: Identify the purpose
This helps avoid errors when arguments are missing by providing fallback values.Final Answer:
To provide fallback values when arguments are missing -> Option AQuick Check:
Default parameters = fallback values [OK]
- Confusing default parameters with return type enforcement
- Thinking default parameters declare variables
- Mixing default parameters with anonymous functions
Which of the following is the correct syntax for a TypeScript function with a default parameter of type number?
function multiply(x: number, y: number = 2) { return x * y; }Solution
Step 1: Check parameter type and default value syntax
In TypeScript, the type annotation comes before the default value:param: type = default.Step 2: Verify each option
function multiply(x: number, y: number = 2) { return x * y; } correctly usesy: number = 2. Others have syntax errors or wrong order.Final Answer:
function multiply(x: number, y: number = 2) { return x * y; } -> Option CQuick Check:
Type before default value = correct syntax [OK]
- Placing default value before type annotation
- Omitting type annotation on default parameter
- Assigning default to wrong parameter
What is the output of the following TypeScript code?
function greet(name: string = "Guest") {
return `Hello, ${name}!`;
}
console.log(greet());
console.log(greet("Alice"));Solution
Step 1: Analyze default parameter usage
Callinggreet()without argument uses default"Guest".Step 2: Check outputs for both calls
First call prints "Hello, Guest!"; second call prints "Hello, Alice!".Final Answer:
Hello, Guest!\nHello, Alice! -> Option BQuick Check:
Default parameter used when argument missing [OK]
- Expecting undefined instead of default value
- Thinking missing argument causes error
- Ignoring template literal output format
Identify the error in this TypeScript function and choose the correct fix:
function calculateArea(width: number = 5, height: number) {
return width * height;
}Solution
Step 1: Understand parameter order rules
In TypeScript, parameters with default values must come after parameters without defaults.Step 2: Fix parameter order
Movingwidthwith default to the end fixes the error.Final Answer:
Move the parameter with default value to the end: function calculateArea(height: number, width: number = 5) {...} -> Option AQuick Check:
Default parameters must be last [OK]
- Placing default parameters before required ones
- Ignoring TypeScript parameter order rules
- Assuming no error when order is wrong
Consider this function that merges two objects with default parameters:
function mergeOptions(options: { verbose?: boolean } = { verbose: false }, defaults: { verbose: boolean } = { verbose: true }) {
return { ...defaults, ...options };
}
console.log(mergeOptions());
console.log(mergeOptions({ verbose: true }));What is the output of the two console.log calls?
Solution
Step 1: Understand default parameter values
Bothoptionsanddefaultshave default objects with verbose flags.Step 2: Analyze object merging
Using spread,{ ...defaults, ...options }merges withoptionsoverridingdefaults.Step 3: Evaluate calls
First call uses defaults:options = { verbose: false },defaults = { verbose: true }, merged result is{ verbose: false }becauseoptionsoverwritesdefaults.Step 4: Check second call
Second call passes{ verbose: true }asoptions, so merged result is{ verbose: true }.Final Answer:
{ verbose: false }\n{ verbose: true } -> Option DQuick Check:
Options override defaults in merge [OK]
- Confusing which object overrides which in spread
- Assuming default parameters merge automatically
- Ignoring optional property in type
Ready to prove it?
Pass the test and this pattern moves unknown
