Learn TypeScript Help

Type Guarding an Abstract Class

As classes abstratas no TS são geradas como classes regulares do JS pelo TSC

Assim o pulo do gato dessa abordagem é fazer com que o TSC previna a classe abstrada de ser instanciadas e isso não importa para o código JS, podendo potencialmente permitir objetos serem criados de classes abstratas

Porém essa abordagem faz com que o instanceof consiga ser usada para narrow types:

abstract class Person { constructor(public id: string, public name: string, public city: string) { } getDetails(): string { return `${this.name}, ${this.getSpecificDetails()}`; } abstract getSpecificDetails(): string; } class Employee extends Person { constructor(public readonly id: string, public name: string, private dept: string, public city: string) { super(id, name, city); } getSpecificDetails() { return `works in ${this.dept}`; } } class Customer { constructor(public readonly id: string, public name: string, public city: string, public creditLimit: number) { } } let data: (Person | Customer)[] = [ new Employee("fvega", "Fidel Vega", "Sales", "Paris"), new Customer("ajones", "Alice Jones", "London", 500)]; data.forEach(item => { if (item instanceof Person) { console.log(item.getDetails()); } else { console.log(`Customer: ${item.name}`); } })''
26 November 2025