Bird
Raised Fist0
Typescriptprogramming~15 mins

Generic function syntax in Typescript - Mini Project: Build & Apply

Choose your learning style10 modes available
Generic function syntax
📖 Scenario: You are building a simple utility library in TypeScript that can work with different types of data.
🎯 Goal: Create a generic function that returns the first element of any array, no matter what type of elements it holds.
📋 What You'll Learn
Create a generic function called getFirstElement
The function should accept one parameter called arr which is an array of generic type T
The function should return the first element of the array with type T
Call the function with a number array and a string array
Print the results of both calls
💡 Why This Matters
🌍 Real World
Generic functions are useful in libraries and frameworks where you want to write code that works with many data types without repeating yourself.
💼 Career
Understanding generics is important for TypeScript developers to write flexible and safe code, which is highly valued in professional software development.
Progress0 / 4 steps
1
Create a number array
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 string array
Create a variable called words and assign it the array ["apple", "banana", "cherry"].
Typescript
Hint

Use const words = ["apple", "banana", "cherry"]; to create the array.

3
Create the generic function
Create a generic function called getFirstElement with a type parameter T. It should take one parameter arr of type T[] and return the first element of arr with type T.
Typescript
Hint

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

4
Call the function and print results
Call getFirstElement with numbers and assign the result to firstNumber. Call getFirstElement with words and assign the result to firstWord. Then print firstNumber and firstWord using console.log.
Typescript
Hint

Use const firstNumber = getFirstElement(numbers); and console.log(firstNumber); similarly for words.

Practice

(1/5)
1. What does the <T> represent in a TypeScript generic function?
easy
A. A placeholder for a type that will be specified later
B. A variable name for a function parameter
C. A special keyword to declare a constant
D. A syntax error in TypeScript

Solution

  1. Step 1: Understand generic syntax

    The <T> syntax is used to declare a generic type parameter in TypeScript functions.
  2. Step 2: Identify the role of T

    It acts as a placeholder for any type that will be provided when the function is called, making the function reusable for different types.
  3. Final Answer:

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

    Generic <T> = Type placeholder [OK]
Hint: Remember <T> means 'type to be decided' [OK]
Common Mistakes:
  • Thinking T is a variable name
  • Confusing <T> with a function argument
  • Assuming <T> is a TypeScript keyword
2. Which of the following is the correct syntax to declare a generic function named identity that returns the same type it receives?
easy
A. function identity<T>(arg): T { return arg; }
B. function identity(arg: T): T { return arg; }
C. function identity<T>(arg: T): T { return arg; }
D. function identity<T>(arg: T): void { return arg; }

Solution

  1. Step 1: Check generic declaration

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

    The parameter arg should be of type T, and the function should return the same type T.
  3. Final Answer:

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

    Generic function syntax = function identity<T>(arg: T): T { return arg; } [OK]
Hint: Generic type <T> goes before parameters [OK]
Common Mistakes:
  • Omitting <T> before parameters
  • Not specifying type for arg
  • Using void as return type incorrectly
3. What will be the output of the following TypeScript code?
function wrapInArray<T>(value: T): T[] { return [value]; }
const result = wrapInArray(5);
console.log(result);
medium
A. TypeError at runtime
B. 5
C. SyntaxError
D. [5]

Solution

  1. Step 1: Understand function behavior

    The function wrapInArray takes a value of any type T and returns an array containing that value.
  2. Step 2: Analyze the call with number 5

    Calling wrapInArray(5) returns an array with one element: [5].
  3. Final Answer:

    [5] -> Option D
  4. Quick Check:

    wrapInArray(5) = [5] [OK]
Hint: Generic returns array with input inside brackets [OK]
Common Mistakes:
  • Expecting just the value without array
  • Confusing output with error
  • Misreading return type as void
4. Identify the error in this generic function declaration:
function getFirstElement<T>(arr: T): T {
return arr[0];
}
medium
A. Parameter arr should be an array type T[], not T
B. Return type should be T[] instead of T
C. Generic type <T> is missing
D. Function should not use generics here

Solution

  1. Step 1: Check parameter type

    The parameter arr is declared as type T, but the function tries to access arr[0], which requires arr to be an array.
  2. Step 2: Correct parameter type

    To access the first element, arr should be of type T[] (array of T), not just T.
  3. Final Answer:

    Parameter arr should be an array type T[], not T -> Option A
  4. Quick Check:

    Array parameter needs T[] type [OK]
Hint: Array parameters need T[] type, not just T [OK]
Common Mistakes:
  • Using T instead of T[] for arrays
  • Returning wrong type
  • Forgetting to declare generic <T>
5. You want to write a generic function mergeObjects that takes two objects of possibly different types and returns a new object combining both. Which is the correct syntax to declare this function?
hard
A. function mergeObjects(obj1: T, obj2: U): object { return {...obj1, ...obj2}; }
B. function mergeObjects(obj1: T, obj2: U): T & U { return {...obj1, ...obj2}; }
C. function mergeObjects(obj1: object, obj2: object): object { return {...obj1, ...obj2}; }
D. function mergeObjects<T>(obj1: T, obj2: T): T { return {...obj1, ...obj2}; }

Solution

  1. Step 1: Understand the requirement

    The function should accept two objects of different types and return a combined object containing properties of both.
  2. Step 2: Check generic parameters and return type

    Using two generic types T and U allows different input types. The return type T & U means an object with properties from both types.
  3. Step 3: Verify function body

    The spread operator {...obj1, ...obj2} correctly merges the two objects.
  4. Final Answer:

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

    Two generics + intersection return = function mergeObjects(obj1: T, obj2: U): T & U { return {...obj1, ...obj2}; } [OK]
Hint: Use two generics and return type intersection T & U [OK]
Common Mistakes:
  • Using same generic type for both parameters
  • Returning just object loses 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