blog
2023.12.16·3 min read

Understanding Abstract Classes in TypeScript

An introduction to abstract classes in TypeScript. Learn how to use abstract classes to create a base for other classes, enforce method implementation, and build more structured and maintainable code.

Understanding Abstract Classes in TypeScript

Abstract classes are a fundamental concept in TypeScript, they enable us to define classes that represent a base from which other classes may be derived. They serve as a blueprint for other classes without being instantiated themselves. Here’s a closer look at what makes abstract classes a powerful feature in TypeScript.

Characteristics of Abstract Classes:

  • Cannot Instantiate Directly: Abstract classes are not complete by themselves and hence, you cannot create an instance of an abstract class directly.
  • Parent Class Role: They are primarily used as a base class from which other classes may inherit.
  • Partial Implementation: Abstract classes can provide implementations for some of their methods.
  • Deferred Method Signatures: Methods that don’t have an implementation in an abstract class but are expected to be implemented in derived classes are defined as abstract methods.
  • Enforced Implementation: Abstract classes can force derived classes to implement specific methods, ensuring a consistent API.

Example in TypeScript:

Let’s illustrate abstract classes with an example. Consider a scenario where we have various types of documents that need to be parsed differently.

abstract class DocumentParser {
  // A concrete method within the abstract class
  parseCommonMetadata(): void {
    // common parsing logic
  }

  // An abstract method that has to be implemented by subclasses
  abstract parseDocument(): void;
}

class PDFParser extends DocumentParser {
  parseDocument(): void {
    // PDF specific parsing logic
  }
}

class WordParser extends DocumentParser {
  parseDocument(): void {
    // Word document specific parsing logic
  }
}

In this example, DocumentParser is an abstract class with a concrete method parseCommonMetadata and an abstract method parseDocument. The PDFParser and WordParser classes inherit from DocumentParser and provide specific implementations for the parseDocument method.

Utilizing Abstract Classes:

Abstract classes are used when there is a shared set of behaviors that various implementations will have in common, but the actual behavior for those implementations will differ. They provide a clear contract for what a set of subclasses should do, but leave the specific implementation of that behavior up to the subclasses.

Best Practices:

  • Use abstract classes for shared behavior while avoiding the instantiation of incomplete class definitions.
  • Ensure that any subclass extending an abstract class provides implementations for all its abstract methods.
  • Take advantage of TypeScript’s type-checking to ensure subclasses correctly implement abstract methods.

Abstract classes in TypeScript offer a structured approach to building hierarchies for classes with shared characteristics while enforcing certain design patterns and behaviors. Understanding and leveraging them can lead to more predictable and maintainable code.

just you