Herança
Herança é quando uma classe estende outra e herda seus membros:
class EntidadeBase {
constructor(
public id: string,
public criadoEm: Date = new Date()
) {}
toString(): string {
return `[${this.id}]`;
}
}
class EventoFiscal extends EntidadeBase {
constructor(
id: string,
public tenantId: string,
public competencia: string
) {
super(id); // obrigatório chamar super
}
}
class EventoReinf extends EventoFiscal {
constructor(
id: string,
tenantId: string,
competencia: string,
public codigoEvento: string
) {
super(id, tenantId, competencia);
}
}
Polimorfismo
Polimorfismo é a capacidade de tratar objetos de tipos diferentes de forma uniforme através de um tipo base:
abstract class TransmissorFiscal {
abstract transmitir(payload: unknown): Promise<Protocolo>;
}
class TransmissorReinf extends TransmissorFiscal {
async transmitir(payload: unknown): Promise<Protocolo> {
return api.post("/reinf", payload);
}
}
class TransmissorEFinanceira extends TransmissorFiscal {
async transmitir(payload: unknown): Promise<Protocolo> {
return api.post("/efinanceira", payload);
}
}
// função que aceita qualquer transmissor — polimorfismo
async function executarTransmissao(
transmissor: TransmissorFiscal,
payload: unknown
) {
return transmissor.transmitir(payload); // não importa qual é
}
// chamadas polimórficas
executarTransmissao(new TransmissorReinf(), payload);
executarTransmissao(new TransmissorEFinanceira(), payload);
O código que usa TransmissorFiscal não precisa saber qual implementação está recebendo — isso é o coração do polimorfismo.
Top comments (0)