Script Valley
TypeScript: Complete Course from Zero
GenericsLesson 4.3

Generic interfaces and generic classes in TypeScript

generic interface declaration, generic class, generic stack implementation, multiple type parameters, default type parameters

Generic interfaces

interface Repository {
  findById(id: number): T | null;
  findAll(): T[];
  save(entity: T): void;
  delete(id: number): void;
}

Any class implementing this interface must specify T:

class UserRepo implements Repository {
  private users: User[] = [];
  findById(id: number) { return this.users.find(u => u.id === id) ?? null; }
  findAll()            { return this.users; }
  save(user: User)     { this.users.push(user); }
  delete(id: number)   { this.users = this.users.filter(u => u.id !== id); }
}

Generic class: Stack

class Stack {
  private items: T[] = [];
  push(item: T): void   { this.items.push(item); }
  pop(): T | undefined  { return this.items.pop(); }
  peek(): T | undefined { return this.items[this.items.length - 1]; }
  get size(): number    { return this.items.length; }
}

const stack = new Stack();
stack.push(1);
stack.push(2);
stack.pop(); // 2

Up next

Built-in TypeScript utility types Partial, Required, Readonly, Pick, Omit

Sign in to track progress