What are abstract constructor types in TypeScript?

Why Interviewers Ask This

Senior TypeScript engineers are expected to reason about architecture, performance, and edge cases. This question separates mid-level from senior candidates by testing deep system-level understanding.

Answer

Abstract constructor types describe the type of an abstract class — a class that cannot be directly instantiated with new. The type for a regular class (constructable) is new (...args: any[]) => InstanceType. The type for an abstract class is abstract new (...args: any[]) => InstanceType. This distinction matters when writing mixins or higher-order class functions that need to accept abstract classes: type AbstractConstructor<T> = abstract new (...args: any[]) => T;. Mixin that works with abstract classes: function Serializable<T extends AbstractConstructor<object>>(Base: T) { abstract class Serializable extends Base { abstract serialize(): string; } return Serializable; }. Without the abstract keyword on the constructor type, passing an abstract class to a function expecting a constructable class causes a type error — because abstract classes cannot be new-d. TypeScript 4.2 added support for abstract construct signatures to properly type abstract class references.

Pro Tip

Before answering, structure your response: one-line definition → real-world analogy → concrete example from a project. This makes even complex TypeScript answers easy to follow.