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