Olá, Eduardo! Como vai?
A ideia é usar interfaces para definir um contrato comum para todas as classes de pagamento, mas cada classe de pagamento pode ter suas próprias peculiaridades. No seu caso, você poderia criar uma interface genérica Pagamento
com o método pagar()
, assim como foi feito na aula.
Para lidar com as especificidades de cada tipo de pagamento, você poderia adicionar propriedades específicas em cada classe que implementa a interface Pagamento
. Por exemplo, a classe PagamentoPix
poderia ter uma propriedade chavePix
, a classe PagamentoBoleto
poderia ter uma propriedade codigoBarras
, e a classe PagamentoTed
poderia ter uma propriedade dadosConta
.
Aqui está um exemplo de como isso poderia ser feito:
interface Pagamento {
valor: number;
pagar(): void;
}
class PagamentoPix implements Pagamento {
valor: number;
chavePix: string;
constructor(valor: number, chavePix: string) {
this.valor = valor;
this.chavePix = chavePix;
}
pagar(): void {
console.log(`O pagamento de ${this.valor} será feito por Pix para a chave ${this.chavePix}.`);
}
}
class PagamentoBoleto implements Pagamento {
valor: number;
codigoBarras: string;
constructor(valor: number, codigoBarras: string) {
this.valor = valor;
this.codigoBarras = codigoBarras;
}
pagar(): void {
console.log(`O pagamento de ${this.valor} será feito por boleto com o código ${this.codigoBarras}.`);
}
}
class PagamentoTed implements Pagamento {
valor: number;
dadosConta: object;
constructor(valor: number, dadosConta: object) {
this.valor = valor;
this.dadosConta = dadosConta;
}
pagar(): void {
console.log(`O pagamento de ${this.valor} será feito por TED para a conta ${this.dadosConta}.`);
}
}
Dessa forma, você mantém a interface genérica Pagamento
e ainda consegue adaptá-la para diferentes tipos de pagamento, cada um com suas próprias peculiaridades.
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.