Bird
Raised Fist0
Typescriptprogramming~15 mins

How TypeScript infers generic types - Try It Yourself

Choose your learning style10 modes available
How TypeScript infers generic types
📖 Scenario: You are building a small utility to work with arrays of different types. You want to create a function that can accept any type of array and return the first element. TypeScript can help by figuring out the type automatically using generics.
🎯 Goal: Build a generic function in TypeScript that returns the first element of any array, letting TypeScript infer the type automatically.
📋 What You'll Learn
Create a generic function called getFirstElement that accepts an array of any type.
Use TypeScript's generic type inference to let the function know the type of the array elements.
Call the function with different types of arrays: numbers and strings.
Print the returned first element from each call.
💡 Why This Matters
🌍 Real World
Generic functions are used in many libraries and applications to write reusable code that works with different data types safely.
💼 Career
Understanding how TypeScript infers generic types is important for writing clean, maintainable, and type-safe code in professional TypeScript projects.
Progress0 / 4 steps
1
Create an array of numbers
Create a variable called numbers and assign it the array [10, 20, 30].
Typescript
Hint

Use const numbers = [10, 20, 30]; to create the array.

2
Create a generic function to get the first element
Create a generic function called getFirstElement with a type parameter T. It should accept a parameter arr of type T[] and return a value of type T.
Typescript
Hint

Use function getFirstElement(arr: T[]): T { return arr[0]; }.

3
Call the generic function with number and string arrays
Call getFirstElement with the numbers array and assign the result to firstNumber. Then create a variable words with the array ["apple", "banana", "cherry"] and call getFirstElement with words, assigning the result to firstWord.
Typescript
Hint

Call the function like getFirstElement(numbers) and getFirstElement(words).

4
Print the results
Print firstNumber and firstWord using console.log.
Typescript
Hint

Use console.log(firstNumber); console.log(firstWord); to print the values.

Practice

(1/5)
1. What does TypeScript do when you call a generic function without specifying the type explicitly?
easy
A. It ignores the generic and treats the function as non-generic.
B. It throws a compilation error asking for the type.
C. It guesses the generic type based on the arguments you pass.
D. It always uses the type any by default.

Solution

  1. Step 1: Understand generic function calls

    When you call a generic function without specifying the type, TypeScript tries to figure out the type from the arguments you provide.
  2. Step 2: Check TypeScript behavior

    TypeScript uses the argument types to infer the generic type automatically, so you don't have to write it explicitly.
  3. Final Answer:

    It guesses the generic type based on the arguments you pass. -> Option C
  4. Quick Check:

    Type inference = guessing type from arguments [OK]
Hint: Remember: TypeScript guesses generic types from arguments [OK]
Common Mistakes:
  • Thinking TypeScript requires explicit generic types always
  • Assuming it defaults to any type
  • Believing generic types are ignored if not specified
2. Which of the following is the correct syntax to define a generic function in TypeScript that returns the same type it receives?
easy
A. function identity<T>(arg: T): T { return arg; }
B. function identity(arg: T): T { return arg; }
C. function identity<T>(arg): T { return arg; }
D. function identity<T>(arg: T): any { return arg; }

Solution

  1. Step 1: Check generic function syntax

    The generic type parameter T must be declared before the function parameters inside angle brackets <T>.
  2. Step 2: Verify parameter and return types

    The parameter arg should be typed as T, and the return type should also be T to return the same type.
  3. Final Answer:

    function identity<T>(arg: T): T { return arg; } -> Option A
  4. Quick Check:

    Generic syntax = <T> before parameters [OK]
Hint: Generic type <T> goes before parameters in function definition [OK]
Common Mistakes:
  • Omitting <T> before parameters
  • Not typing the argument as T
  • Returning any instead of T
3. What will be the output of this TypeScript code?
function wrapInArray<T>(value: T) {
  return [value];
}

const result = wrapInArray(42);
console.log(typeof result[0]);
medium
A. "number"
B. "string"
C. "object"
D. "undefined"

Solution

  1. Step 1: Identify the generic type inferred

    The function wrapInArray is called with 42, a number, so TypeScript infers T as number.
  2. Step 2: Check the returned array and logged type

    The function returns an array containing the number 42. Accessing result[0] gives 42, so typeof result[0] is "number".
  3. Final Answer:

    "number" -> Option A
  4. Quick Check:

    typeof 42 = "number" [OK]
Hint: Generic type matches argument type, so typeof matches argument [OK]
Common Mistakes:
  • Assuming the type is string by default
  • Confusing array type with element type
  • Expecting 'object' because of array
4. Consider this code snippet:
function firstElement<T>(arr: T[]): T {
  return arr[0];
}

const value = firstElement([true, false, true]);
console.log(value.toUpperCase());

What is the problem here?
medium
A. The array passed is empty, so arr[0] is undefined.
B. TypeScript cannot infer the generic type T.
C. The function firstElement returns an array instead of an element.
D. Calling toUpperCase() on a boolean causes a compile-time error.

Solution

  1. Step 1: Analyze the inferred generic type

    The array [true, false, true] is of type boolean[], so T is inferred as boolean.
  2. Step 2: Check the method call on the returned value

    The function returns a boolean, but toUpperCase() is a string method. Calling it on a boolean causes a compile-time error.
  3. Final Answer:

    Calling toUpperCase() on a boolean causes a compile-time error. -> Option D
  4. Quick Check:

    Boolean has no toUpperCase() method [OK]
Hint: Check if method matches the inferred type before calling [OK]
Common Mistakes:
  • Thinking TypeScript inference failed
  • Assuming function returns array instead of element
  • Ignoring compile-time errors from wrong method calls
5. You want to write a generic function mergeObjects that takes two objects and returns a new object combining both. How does TypeScript infer the generic types when you call mergeObjects({name: "Alice"}, {age: 30})?
function mergeObjects(obj1: T, obj2: U): T & U {
  return {...obj1, ...obj2};
}
hard
A. TypeScript infers both T and U as object losing specific properties.
B. TypeScript infers T as {name: string} and U as {age: number}, returning their intersection type.
C. TypeScript cannot infer generic types for multiple parameters automatically.
D. TypeScript infers T and U as any by default.

Solution

  1. Step 1: Identify argument types passed to the function

    The first argument is {name: "Alice"} which has type {name: string}. The second is {age: 30} with type {age: number}.
  2. Step 2: Understand TypeScript's inference for multiple generics

    TypeScript infers T as the type of the first argument and U as the type of the second argument automatically.
  3. Step 3: Check the return type

    The return type is the intersection T & U, meaning the combined object has both name and age properties.
  4. Final Answer:

    TypeScript infers T as {name: string} and U as {age: number}, returning their intersection type. -> Option B
  5. Quick Check:

    Multiple generics inferred from each argument [OK]
Hint: Each generic inferred from corresponding argument type [OK]
Common Mistakes:
  • Assuming generic types default to object or any
  • Thinking TypeScript can't infer multiple generics
  • Confusing intersection type with union type
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