Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Duvida referente interfaces sobrecarregadas

De acordo com o contexto da aula... Como criar uma interface genérica que possa ser adaptada para diferentes tipos de pagamento, considerando que cada tipo de pagamento possui uma chave específica, como por exemplo, chave Pix para pagamentos por Pix, código de barras para boletos e dados da conta para TED?

Seria sobrecarga de metodos que aceita parametro diferente?

1 resposta
solução!

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 ✓.