What if you could write one function that magically works for any list you have?
Why Generic functions with arrays in Typescript? - Purpose & Use Cases
Imagine you have several lists of different things: numbers, names, or even dates. You want to write a function that works on all these lists, but you write a new function for each type manually.
This means you write a lot of repeated code, which takes time and can easily have mistakes. If you want to change how the function works, you must update every version separately, which is tiring and error-prone.
Generic functions let you write one function that works with any type of array. You write the logic once, and it automatically adapts to numbers, strings, or any other type, saving time and avoiding mistakes.
function firstNumber(arr: number[]): number { return arr[0]; }
function firstString(arr: string[]): string { return arr[0]; }function firstElement<T>(arr: T[]): T { return arr[0]; }It enables writing flexible, reusable code that works with any kind of array without rewriting the same logic again and again.
Think about a shopping app that handles lists of products, prices, or user reviews. With generic functions, one function can process all these lists safely and easily.
Manual functions for each type cause repeated code and mistakes.
Generic functions work with any array type using one definition.
This saves time, reduces errors, and makes code reusable.
Practice
What is the main purpose of using a generic function with <T> in TypeScript when working with arrays?
Solution
Step 1: Understand generic type
The generic type<T><T>allows a function to accept any type, making it reusable for different data types.Step 2: Apply to arrays
Using<T>with arrays means the function can handle arrays of numbers, strings, or any other type without rewriting the function.Final Answer:
To allow the function to work with arrays of any type without rewriting code. -> Option AQuick Check:
Generic<T>= reusable for any type [OK]
<T> means any type works [OK]- Thinking generic restricts to one type
- Assuming generic converts types
- Believing generic improves speed only
Which of the following is the correct syntax to declare a generic function firstElement that returns the first element of an array of any type?
function firstElement(____): T | undefined {
return arr[0];
}Solution
Step 1: Identify generic function syntax
Generic functions declare the type parameter before the argument list, likefunction fnName<T>(args).Step 2: Match syntax to example
The correct syntax isfunction firstElement<T>(arr: T[]): T | undefinedto accept an array of typeT.Final Answer:
<T>(arr: T[]) -> Option CQuick Check:
Generic syntax = <T>(args) [OK]
- Placing
<T>after parameters - Omitting
<T>entirely - Using incorrect parameter types
What will be the output of the following TypeScript code?
function getLastElement<T>(arr: T[]): T | undefined {
return arr.length ? arr[arr.length - 1] : undefined;
}
const nums = [10, 20, 30];
const result = getLastElement(nums);
console.log(result);Solution
Step 1: Understand function behavior
The function returns the last element if the array is not empty; otherwise, it returns undefined.Step 2: Apply to given array
The arraynumsis [10, 20, 30], so the last element is 30, which is returned and logged.Final Answer:
30 -> Option AQuick Check:
Last element of [10,20,30] = 30 [OK]
- Returning first element instead
- Ignoring empty array case
- Expecting error due to generics
Identify the error in this generic function and select the corrected version:
function wrapInArray<T>(item: T): T[] {
return item;
}Solution
Step 1: Analyze function return type
The function promises to return an array of typeT[], but returnsitemwhich is typeT, not an array.Step 2: Fix return statement
Wrappingitemin square brackets[item]creates an array containing the item, matching the return type.Final Answer:
Change return to[item]to return an array containing the item. -> Option BQuick Check:
Return array by wrapping item in [] [OK]
- Returning item directly instead of array
- Changing parameter type unnecessarily
- Removing generics without reason
You want to create a generic function filterNonEmpty that takes an array of any type T and returns a new array excluding null and undefined values. Which implementation correctly uses generics and array filtering?
Solution
Step 1: Define input and output types
The input array can containT,null, orundefined, so its type is(T | null | undefined)[]. The output should be onlyT[].Step 2: Filter out
Usingnullandundefinedfilter(item => item != null)removes bothnullandundefinedvalues safely.Final Answer:
function filterNonEmpty<T>(arr: (T | null | undefined)[]): T[] { return arr.filter(item => item != null); } -> Option DQuick Check:
Filter null/undefined from mixed array [OK]
- Not typing input to include null/undefined
- Returning wrong output type
- Using strict !== null only, missing undefined
Ready to prove it?
Pass the test and this pattern moves unknown
