Bird
Raised Fist0
Typescriptprogramming~5 mins

Multiple generic parameters in Typescript - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Multiple generic parameters
O(n + m)
Understanding Time Complexity

We want to see how the time needed changes when using multiple generic parameters in TypeScript functions or classes.

How does the work grow when both generic inputs get bigger?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


function combineArrays<T, U>(arr1: T[], arr2: U[]): (T | U)[] {
  const result: (T | U)[] = [];
  for (const item of arr1) {
    result.push(item);
  }
  for (const item of arr2) {
    result.push(item);
  }
  return result;
}
    

This function takes two arrays with different types and combines them into one array.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Two separate loops that go through each array.
  • How many times: Once for each element in the first array, and once for each element in the second array.
How Execution Grows With Input

As the size of both arrays grows, the total work grows by adding the work for each array.

Input Size (n, m)Approx. Operations
10, 1020
100, 100200
1000, 10002000

Pattern observation: The total work grows roughly by adding the sizes of both inputs.

Final Time Complexity

Time Complexity: O(n + m)

This means the time grows in a straight line with the total number of items in both arrays combined.

Common Mistake

[X] Wrong: "The time complexity is O(n * m) because there are two generic types."

[OK] Correct: The loops run one after the other, not nested. So the work adds up, it does not multiply.

Interview Connect

Understanding how multiple inputs affect time helps you explain your code clearly and shows you can think about efficiency in real situations.

Self-Check

"What if the two loops were nested instead of separate? How would the time complexity change?"

Practice

(1/5)
1.

What does using multiple generic parameters in TypeScript allow you to do?

Example: function example<T, U>(arg1: T, arg2: U): void {}

easy
A. Only use one type at a time
B. Work with different types together in a single function or class
C. Automatically convert types to strings
D. Disable type checking for function arguments

Solution

  1. Step 1: Understand generic parameters

    Generic parameters like T and U let you define placeholders for types.
  2. Step 2: Analyze multiple generics usage

    Using multiple generics allows a function or class to accept different types for different parameters, making it flexible and type-safe.
  3. Final Answer:

    Work with different types together in a single function or class -> Option B
  4. Quick Check:

    Multiple generics = different types together [OK]
Hint: Multiple generics mean multiple type placeholders [OK]
Common Mistakes:
  • Thinking generics convert types automatically
  • Assuming only one generic can be used
  • Believing generics disable type checking
2.

Which of the following is the correct syntax to declare a function with two generic parameters T and U in TypeScript?

easy
A. function example<T & U>(arg1: T, arg2: U): void {}
B. function example<T U>(arg1: T, arg2: U): void {}
C. function example<T; U>(arg1: T, arg2: U): void {}
D. function example<T, U>(arg1: T, arg2: U): void {}

Solution

  1. Step 1: Recall generic syntax

    Generic parameters are listed inside angle brackets separated by commas, like <T, U>.
  2. Step 2: Check each option

    The correct syntax uses function example<T, U>(arg1: T, arg2: U): void {} with generic parameters separated by commas inside angle brackets. The distractors use invalid delimiters: <T & U>, <T U> (no comma), and <T; U> (semicolon).
  3. Final Answer:

    function example<T, U>(arg1: T, arg2: U): void {} -> Option D
  4. Quick Check:

    Generics separated by commas inside <> [OK]
Hint: Separate generics with commas inside angle brackets [OK]
Common Mistakes:
  • Omitting commas between generic parameters
  • Using semicolons instead of commas
  • Using & instead of commas
3.

What is the output of the following TypeScript code?

function pairToString<T, U>(pair: [T, U]): string {
  return `${pair[0]} and ${pair[1]}`;
}

const result = pairToString<number, string>([5, 'apples']);
console.log(result);
medium
A. "[5, apples]"
B. Type error because types differ
C. "5 and apples"
D. "number and string"

Solution

  1. Step 1: Understand the function behavior

    The function takes a tuple with two generic types and returns a string combining both elements.
  2. Step 2: Analyze the call with types and values

    Calling with <number, string> and tuple [5, 'apples'] returns the string "5 and apples".
  3. Final Answer:

    "5 and apples" -> Option C
  4. Quick Check:

    Tuple values combined as string = "5 and apples" [OK]
Hint: Generics keep types but output string combines values [OK]
Common Mistakes:
  • Expecting a type error due to different types
  • Thinking output is the tuple stringified
  • Confusing generic types with runtime values
4.

Identify the error in this TypeScript function using multiple generic parameters:

function combine<T, U>(a: T, b: U): T {
  return b;
}
medium
A. Return type is T but function returns b of type U
B. Missing comma between generic parameters
C. Function should not use generics
D. Parameters a and b must be the same type

Solution

  1. Step 1: Check function signature

    The function declares it returns type T but returns b which is type U.
  2. Step 2: Identify type mismatch

    Returning b violates the declared return type T, causing a type error.
  3. Final Answer:

    Return type is T but function returns b of type U -> Option A
  4. Quick Check:

    Return type mismatch = error [OK]
Hint: Return type must match returned value type [OK]
Common Mistakes:
  • Ignoring return type mismatch
  • Thinking generics auto-convert types
  • Assuming parameters must share the same type
5.

You want to create a generic function mergeObjects that takes two objects of different types and returns a new object combining both. Which is the correct way to declare this function with multiple generic parameters?

hard
A. function mergeObjects<T, U>(obj1: T, obj2: U): T & U { return {...obj1, ...obj2}; }
B. function mergeObjects<T>(obj1: T, obj2: T): T { return {...obj1, ...obj2}; }
C. function mergeObjects(obj1: object, obj2: object): object { return {...obj1, ...obj2}; }
D. function mergeObjects<T, U>(obj1: T, obj2: U): object { return {...obj1, ...obj2}; }

Solution

  1. Step 1: Understand the goal

    The function should accept two objects of different types and return their combined type.
  2. Step 2: Analyze return type

    Using T & U as return type means the result has properties from both types, which is correct.
  3. Step 3: Check options

    function mergeObjects<T, U>(obj1: T, obj2: U): T & U { return {...obj1, ...obj2}; } correctly uses two generics and returns T & U. function mergeObjects<T>(obj1: T, obj2: T): T { return {...obj1, ...obj2}; } uses one generic and same type for both, which is less flexible. function mergeObjects(obj1: object, obj2: object): object { return {...obj1, ...obj2}; } uses plain objects without generics, losing type safety. function mergeObjects<T, U>(obj1: T, obj2: U): object { return {...obj1, ...obj2}; } returns just object, losing specific type info.
  4. Final Answer:

    function mergeObjects<T, U>(obj1: T, obj2: U): T & U { return {...obj1, ...obj2}; } -> Option A
  5. Quick Check:

    Multiple generics + intersection return type = correct [OK]
Hint: Use intersection type T & U for combined object return [OK]
Common Mistakes:
  • Using one generic for both objects
  • Returning just object losing type info
  • Not using intersection type for return
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