Bird
Raised Fist0
Typescriptprogramming~5 mins

Generic function syntax in Typescript

Choose your learning style10 modes available
Introduction

Generic functions let you write one function that works with many types. This saves time and avoids repeating code.

When you want a function to work with different types of data, like numbers or strings.
When you want to keep your code flexible and reusable.
When you want to avoid writing the same function many times for different types.
When you want to keep type safety while using different data types.
When you want to create utility functions that work with any type.
Syntax
Typescript
function functionName<T>(param: T): T {
  // function body
  return param;
}

The <T> after the function name declares a generic type named T.

You can use T as a type inside the function for parameters and return values.

Examples
This function returns whatever value it receives, keeping the same type.
Typescript
function echo<T>(value: T): T {
  return value;
}
This function returns the first item from an array of any type.
Typescript
function firstElement<T>(arr: T[]): T {
  return arr[0];
}
This function puts any item inside an array and returns it.
Typescript
function wrapInArray<T>(item: T): T[] {
  return [item];
}
Sample Program

This program defines a generic function identity that returns the input value. It is called with a number and a string, showing it works with both types.

Typescript
function identity<T>(arg: T): T {
  return arg;
}

const num = identity<number>(42);
const str = identity<string>("hello");

console.log(num);
console.log(str);
OutputSuccess
Important Notes

You can use any name instead of T, but T is common and means 'Type'.

TypeScript can often guess the type, so you can call identity(42) without <number>.

Generic functions help keep your code safe and flexible at the same time.

Summary

Generic functions let you write one function for many types.

Use <T> to declare a generic type.

They keep your code reusable and type-safe.

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