Bird
Raised Fist0
Typescriptprogramming~5 mins

Generic arrow functions in Typescript - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Generic arrow functions
O(n)
Understanding Time Complexity

We want to understand how the time it takes to run a generic arrow function changes as the input size grows.

Specifically, how does the function's work increase when given more data?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


const identity = <T> (items: T[]): T[] => {
  return items.map(item => item);
};

const numbers = [1, 2, 3, 4, 5];
const result = identity(numbers);
    

This code defines a generic arrow function that returns a new array by copying each item from the input array.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: The map method loops over each item in the input array.
  • How many times: It runs once for every element in the array.
How Execution Grows With Input

As the input array gets bigger, the function does more work by visiting each item once.

Input Size (n)Approx. Operations
1010
100100
10001000

Pattern observation: The work grows directly with the number of items. Double the items, double the work.

Final Time Complexity

Time Complexity: O(n)

This means the time to finish grows in a straight line with the input size.

Common Mistake

[X] Wrong: "Generic arrow functions always add extra hidden work and slow down the code a lot."

[OK] Correct: The generic part only helps with types and does not add extra loops or slow down the function itself.

Interview Connect

Understanding how generic arrow functions behave helps you explain your code clearly and shows you know how input size affects performance.

Self-Check

What if the function used nested loops inside the map? How would the time complexity change?

Practice

(1/5)
1.

What does the <T> represent in a generic arrow function in TypeScript?

easy
A. A variable name for a function parameter
B. A placeholder for a type that will be specified later
C. A keyword to declare a constant
D. A special operator for comparison

Solution

  1. Step 1: Understand generic type parameters

    The <T> syntax declares a generic type parameter, which acts as a placeholder for any type.
  2. Step 2: Recognize its purpose in functions

    This allows the function to work with different types while keeping type safety.
  3. Final Answer:

    A placeholder for a type that will be specified later -> Option B
  4. Quick Check:

    Generic type parameter = placeholder type [OK]
Hint: Think of <T> as a flexible type placeholder [OK]
Common Mistakes:
  • Confusing <T> with a variable name
  • Thinking <T> is a keyword like const or let
  • Assuming <T> is an operator
2.

Which of the following is the correct syntax for a generic arrow function that returns the same type it receives?

?
easy
A. const identity = <T> = (arg: T): T => arg;
B. const identity = <T>: (arg: T) => T => arg;
C. const identity = <T>(arg: T): T => arg;
D. const identity = <T> (arg: T) => { return arg; };

Solution

  1. Step 1: Check generic arrow function syntax

    The generic type parameter <T> must come immediately after the function name without an equals sign.
  2. Step 2: Verify arrow function structure

    The function takes an argument of type T and returns the same type T. const identity = <T>(arg: T): T => arg; matches this syntax correctly.
  3. Final Answer:

    const identity = <T>(arg: T): T => arg; -> Option C
  4. Quick Check:

    Correct generic arrow function syntax = const identity = <T>(arg: T): T => arg; [OK]
Hint: Generic syntax: const fn = <T>(arg: T): T => ... [OK]
Common Mistakes:
  • Adding an equals sign after <T>
  • Misplacing parentheses around <T>
  • Using incorrect arrow function syntax
3.

What will be the output of this TypeScript code?

const wrapInArray = <T>(value: T): T[] => [value];

console.log(wrapInArray(5));
console.log(wrapInArray('hello'));
medium
A. [5] ['hello']
B. 5 hello
C. [5, 'hello']
D. Error: Type mismatch

Solution

  1. Step 1: Understand the generic function behavior

    The function wrapInArray takes a value of any type T and returns an array containing that value.
  2. Step 2: Analyze the console.log outputs

    Calling wrapInArray(5) returns [5], and wrapInArray('hello') returns ['hello'].
  3. Final Answer:

    [5] ['hello'] -> Option A
  4. Quick Check:

    Generic function returns array with input value [OK]
Hint: Generic function wraps input in array, output matches input type [OK]
Common Mistakes:
  • Expecting output without array brackets
  • Thinking it returns a tuple
  • Confusing types causing errors
4.

Identify the error in this generic arrow function and choose the corrected version:

const getFirst = <T> = (arr: T[]): T => {
  return arr[0];
};
medium
A. const getFirst = <T> (arr: T[]): T => { return arr[0]; };
B. const getFirst = (arr: T[]): T => arr[0];
C. const getFirst = <T>: (arr: T[]) => T => arr[0];
D. const getFirst = <T>(arr: T[]): T => arr[0];

Solution

  1. Step 1: Identify incorrect syntax in original code

    The original code incorrectly uses an equals sign after <T>, which is not valid syntax for generic arrow functions.
  2. Step 2: Choose the correct syntax

    const getFirst = <T>(arr: T[]): T => arr[0]; correctly places <T> immediately after the function name without an equals sign and uses concise arrow function syntax.
  3. Final Answer:

    const getFirst = <T>(arr: T[]): T => arr[0]; -> Option D
  4. Quick Check:

    Generic arrow function syntax = const getFirst = <T>(arr: T[]): T => arr[0]; [OK]
Hint: No equals sign after <T> in generic arrow functions [OK]
Common Mistakes:
  • Adding equals sign after <T>
  • Omitting generic parameter <T>
  • Incorrect arrow function syntax
5.

Given this generic arrow function, what is the output of mergeObjects({a: 1}, {b: 2})?

const mergeObjects = <T, U>(obj1: T, obj2: U): T & U => ({ ...obj1, ...obj2 });

console.log(mergeObjects({a: 1}, {b: 2}));
hard
A. { a: 1, b: 2 }
B. { a: 1 }
C. { b: 2 }
D. TypeError at runtime

Solution

  1. Step 1: Understand the generic parameters and return type

    The function takes two objects of types T and U and returns their intersection type T & U, meaning it combines properties from both.
  2. Step 2: Analyze the spread operator usage

    The spread operator merges properties from both objects into a new object containing all keys and values.
  3. Step 3: Predict the output of the console.log

    Calling mergeObjects({a: 1}, {b: 2}) returns { a: 1, b: 2 }.
  4. Final Answer:

    { a: 1, b: 2 } -> Option A
  5. Quick Check:

    Spread merge of two objects = combined object [OK]
Hint: Spread operator merges objects, output has all keys [OK]
Common Mistakes:
  • Expecting only first or second object properties
  • Confusing intersection type with union
  • Thinking it causes runtime error
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard