Script Valley
TypeScript: Complete Course from Zero
Classes and Object-Oriented TypeScriptLesson 5.2

Abstract classes and inheritance in TypeScript

abstract class, abstract method, extends for classes, super keyword, method overriding, when to use abstract vs interface

Abstract classes

An abstract class cannot be instantiated directly. It defines structure that subclasses must implement:

abstract class Shape {
  abstract area(): number;
  abstract perimeter(): number;

  describe(): string {
    return `Area: ${this.area()}, Perimeter: ${this.perimeter()}`;
  }
}

class Circle extends Shape {
  constructor(private radius: number) { super(); }
  area()      { return Math.PI * this.radius ** 2; }
  perimeter() { return 2 * Math.PI * this.radius; }
}

const c = new Circle(5);
console.log(c.describe()); // uses base class method

const s = new Shape(); // Error: cannot create abstract class

abstract vs interface

Use abstract classes when you want to share implementation across subclasses alongside the contract. Use interfaces when you only want to define a contract with no shared implementation. Abstract classes also support constructor logic and access modifiers, which interfaces cannot.

Up next

Static members and singleton pattern in TypeScript

Sign in to track progress