DEV Community

Yuri Peixinho
Yuri Peixinho

Posted on

Typescript: Herança e Polimorfismo

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);
  }
}
Enter fullscreen mode Exit fullscreen mode

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);
Enter fullscreen mode Exit fullscreen mode

O código que usa TransmissorFiscal não precisa saber qual implementação está recebendo — isso é o coração do polimorfismo.

Top comments (0)