runtime.boot

Full Stack Systems
Production Mindset

CodeWithMihir

Engineering thoughtful products from interface to infrastructure.

CodeWithMihir

TypeScript Tutorial

TypeScript Generic Functions Explained

Learn how generic functions work in TypeScript, including type parameters, inference, multiple generics, arrays, and practical examples.

Welcome back! I am Mihir, and in this lesson we will learn generic functions in TypeScript.

A generic function uses type parameters to work with different types safely.


Basic Generic Function

function wrap<T>(value: T): T[] {
  return [value];
}

const numbers = wrap(10);
const names = wrap("Mihir");

TypeScript knows:

numbers; // number[]
names; // string[]

Generic Function with Arrays

function getLast<T>(items: T[]): T {
  return items[items.length - 1];
}

const lastNumber = getLast([1, 2, 3]);
const lastUser = getLast(["Mihir", "Alex"]);

The return type depends on the array item type.


Multiple Type Parameters

function pair<T, U>(first: T, second: U): [T, U] {
  return [first, second];
}

const result = pair("age", 28);

TypeScript infers:

result; // [string, number]

Generic Function Expression

const identity = <T,>(value: T): T => {
  return value;
};

The comma after T is sometimes used in .tsx files so TypeScript does not confuse generics with JSX.

In normal .ts files, this also works:

const identity = <T>(value: T): T => value;

Generic Callback Example

function mapItems<T, U>(items: T[], callback: (item: T) => U): U[] {
  return items.map(callback);
}

const lengths = mapItems(["one", "three"], (word) => word.length);

T is string.

U is number.

So lengths is number[].


Avoid Unnecessary Generics

This generic is not useful:

function greet<T>(name: string): string {
  return `Hello, ${name}`;
}

T is not used, so it adds confusion.

Only add generics when they connect types in a meaningful way.


Quick Recap

  • Generic functions use type parameters like <T>.
  • TypeScript usually infers generic types from arguments.
  • Multiple type parameters are allowed.
  • Generics are useful when input and output types are related.
  • Avoid generic parameters that are not used.

Next up, we will learn Generic Interfaces →.