Bird
Raised Fist0
Typescriptprogramming~10 mins

Multiple generic parameters in Typescript - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Multiple generic parameters
Define function with <T, U>
↓
Call function with types
↓
Use T and U inside function
↓
Return or process values
↓
Output result with types applied
This flow shows how a function with two generic types is defined, called with specific types, and uses those types inside its body.
Execution Sample
Typescript
function pair<T, U>(first: T, second: U): [T, U] {
  return [first, second];
}

const result = pair<string, number>("hello", 42);
console.log(result);
This code defines a function with two generic types and returns a tuple of those types, then calls it with string and number.
Execution Table
StepActionTUfirstsecondReturn ValueOutput
1Define function pair<T, U>Generic TGeneric U----
2Call pair<string, number>("hello", 42)stringnumber"hello"42--
3Inside function: return [first, second]stringnumber"hello"42["hello", 42]-
4Assign return to resultstringnumber--["hello", 42]-
5console.log(result)-----["hello", 42]
💡 Function returns tuple ["hello", 42], printed to console, execution ends.
Variable Tracker
VariableStartAfter CallAfter ReturnFinal
TGenericstringstringstring
UGenericnumbernumbernumber
first-"hello""hello""hello"
second-424242
result--["hello", 42]["hello", 42]
Key Moments - 3 Insights
Why do we specify <string, number> when calling the function?
Specifying <string, number> tells TypeScript what types T and U should be for this call, as shown in execution_table step 2.
What does the function return type [T, U] mean?
It means the function returns a tuple where the first element is type T and the second is type U, as seen in step 3 and 4.
Can T and U be the same type?
Yes, T and U can be the same or different types; generics allow flexibility, but here they are string and number as per step 2.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 2, what are the types assigned to T and U?
AT = any, U = any
BT = string, U = number
CT = number, U = string
DT = boolean, U = string
💡 Hint
Check the 'T' and 'U' columns in execution_table row for step 2.
At which step does the function return the tuple ["hello", 42]?
AStep 4
BStep 2
CStep 3
DStep 5
💡 Hint
Look at the 'Return Value' column in execution_table.
If we called pair<number, number>(10, 20), how would the 'T' and 'U' columns change at step 2?
AT = number, U = number
BT = string, U = number
CT = number, U = string
DT = any, U = any
💡 Hint
Refer to how types are assigned in execution_table step 2 for the original call.
Concept Snapshot
function pair<T, U>(first: T, second: U): [T, U] {
  return [first, second];
}

- Use <T, U> to define multiple generic types
- Specify types when calling, e.g. pair<string, number>
- Function returns tuple with types [T, U]
- Allows flexible, type-safe code with multiple generics
Full Transcript
This example shows how to use multiple generic parameters in TypeScript. We define a function pair with two generics T and U. When calling the function, we specify the actual types, like string and number. Inside the function, these types are used to type the parameters and the return tuple. The execution table traces each step: defining the function, calling it with types, returning the tuple, and printing the result. Variables T and U change from generic placeholders to concrete types during the call. Key moments clarify why we specify types and what the return type means. The visual quiz tests understanding of type assignments and return values. This helps beginners see how multiple generics work step-by-step.

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