Introdução
Classes abstratas são contratos parcialmente implementados. Você define o que toda subclasse deve ter, mas deixa partes da implementação para elas.
Não podem ser instanciadas diretamente
abstract class TransmissorFiscal {
constructor(protected tenantId: string) {}
// método abstrato — subclasse DEVE implementar
abstract transmitir(payload: unknown): Promise<Protocolo>;
abstract consultar(protocolo: string): Promise<Status>;
// método concreto — subclasse HERDA pronto
protected logar(msg: string): void {
console.log(`[Tenant: ${this.tenantId}] ${msg}`);
}
async executar(payload: unknown): Promise<Protocolo> {
this.logar("iniciando transmissão");
const protocolo = await this.transmitir(payload);
this.logar(`protocolo: ${protocolo.numero}`);
return protocolo;
}
}
// ❌ não pode instanciar diretamente
const t = new TransmissorFiscal("tenant1");
Subclasses implementam os métodos abstratos
class TransmissorReinf extends TransmissorFiscal {
async transmitir(payload: unknown): Promise<Protocolo> {
// implementação específica do REINF
const resposta = await api.post("/reinf", payload);
return resposta.data;
}
async consultar(protocolo: string): Promise<Status> {
const resposta = await api.get(`/reinf/${protocolo}`);
return resposta.data;
}
}
class TransmissorEFinanceira extends TransmissorFiscal {
async transmitir(payload: unknown): Promise<Protocolo> {
// implementação específica do eFinanceira
const resposta = await api.post("/efinanceira", payload);
return resposta.data;
}
async consultar(protocolo: string): Promise<Status> {
const resposta = await api.get(`/efinanceira/${protocolo}`);
return resposta.data;
}
}
Se uma subclasse não implementar um método abstrato, o TypeScript acusa erro em compilação.
Top comments (0)