Callback function types in Typescript - Time & Space Complexity
When using callback functions, it is important to know how the program's running time changes as the input grows.
We want to see how many times the callback runs and how that affects overall speed.
Analyze the time complexity of the following code snippet.
function processItems(items: number[], callback: (item: number) => void): void {
for (const item of items) {
callback(item);
}
}
const numbers = [1, 2, 3, 4, 5];
processItems(numbers, (num) => console.log(num * 2));
This code runs a callback on each item in an array, doing something with each number.
- Primary operation: The for-loop that goes through each item in the array.
- How many times: Once for every item in the input array.
As the number of items grows, the callback runs more times, so the total work grows too.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 callback calls |
| 100 | 100 callback calls |
| 1000 | 1000 callback calls |
Pattern observation: The work grows directly with the number of items, doubling the items doubles the work.
Time Complexity: O(n)
This means the time it takes grows in a straight line with the number of items.
[X] Wrong: "The callback runs only once, so time is constant."
[OK] Correct: The callback runs once for each item, so more items mean more calls and more time.
Understanding how callbacks affect time helps you explain your code clearly and shows you know how programs scale.
"What if the callback itself contains a loop over the entire array? How would the time complexity change?"
Practice
Solution
Step 1: Understand callback function types
A callback function type defines what inputs (parameters) the callback expects and what it returns.Step 2: Identify what is specified
It does not specify variable names, call order, or call count, only input and output types.Final Answer:
The input parameters and return type of the callback function -> Option AQuick Check:
Callback type = inputs and output [OK]
- Confusing callback type with variable names
- Thinking callback type controls call order
- Assuming callback type limits call count
Solution
Step 1: Check correct syntax for callback type
In TypeScript, a function type is declared as (parameters) => returnType. Parameters must have names and types.Step 2: Match the correct option
type Callback = (input: number) => void; correctly declares a function taking a number named 'input' and returning void.Final Answer:
type Callback = (input: number) => void; -> Option AQuick Check:
Correct syntax = type Callback = (input: number) => void; [OK]
- Omitting parameter name
- Wrong return type
- Incorrect arrow function syntax
type Callback = (x: number) => number;
function applyCallback(n: number, cb: Callback) {
return cb(n) + 1;
}
const result = applyCallback(5, x => x * 2);
console.log(result);Solution
Step 1: Understand the callback and function call
The callback multiplies input by 2. applyCallback calls cb(5), which is 5*2=10, then adds 1.Step 2: Calculate the final result
10 + 1 = 11, so console.log prints 11.Final Answer:
11 -> Option BQuick Check:
5*2+1 = 11 [OK]
- Forgetting to add 1 after callback
- Confusing callback return with input
- Assuming callback returns void
type Callback = (msg: string) => void;
function greet(cb: Callback) {
cb(123);
}Solution
Step 1: Check callback type and usage
Callback expects a string parameter, but greet calls cb with 123 (a number).Step 2: Identify type mismatch error
Passing a number where a string is expected causes a type error.Final Answer:
Callback expects a string, but a number is passed -> Option CQuick Check:
Type mismatch in callback argument [OK]
- Passing wrong argument type to callback
- Ignoring callback return type
- Assuming no error on type mismatch
processItems that takes an array of numbers and a callback. The callback should receive each number and return a string. Which is the correct callback type and function signature to ensure type safety?
Solution
Step 1: Define callback input and output types
The callback should take a number and return a string, so type Callback = (item: number) => string.Step 2: Define function signature matching callback and array
processItems takes number[] and callback, returns string[] because it maps numbers to strings.Final Answer:
type Callback = (item: number) => string; function processItems(items: number[], cb: Callback): string[]; -> Option DQuick Check:
Callback input number, output string [OK]
- Mismatching callback parameter types
- Wrong return type in callback or function
- Ignoring array element types
Ready to prove it?
Pass the test and this pattern moves unknown
