Advanced TypeScript PatternsTypeScript Generics Deep Dive

TypeScript Generics Deep Dive

Free preview

Master generic types, constraints, and inference patterns.

~15 min read

TypeScript Generics Deep Dive

Generics let you write code that works with multiple types while preserving full type safety.

Basic generics

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

const num = identity(42);     // T inferred as number
const str = identity("hello"); // T inferred as string

Generic constraints

function getLength<T extends { length: number }>(value: T): number {
  return value.length;
}

getLength("hello");      // ✅ string has .length
getLength([1, 2, 3]);    // ✅ array has .length
getLength(42);           // ❌ Error: number has no .length

Multiple type parameters

function merge<T extends object, U extends object>(obj1: T, obj2: U): T & U {
  return { ...obj1, ...obj2 };
}

Generic interfaces

interface Repository<T> {
  findById(id: string): Promise<T | null>;
  save(entity: T): Promise<T>;
  delete(id: string): Promise<void>;
}

class UserRepository implements Repository<User> {
  // ...
}