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

Property 'getSaldo' does not exist on type 'typeof Conta'

Bom dia, pessoas!

Estou tendo problemas com este erro: Property 'getSaldo' does not exist on type 'typeof Conta'. Acontece também com os outros métodos da classe "Conta", quando referencio eles de outros módulos.

Os "export" e "import" estão certinhos.

Vou colar abaixo o código typescript da classe "Conta" pra ver se alguém acha algo de errado...

Desde já agradeço qualquer ajuda.

import { TipoTransacao } from "./TipoTransacao.js";
import { Transacao } from "./Transacao.js";
import { GrupoTransacao } from "./grupo-transacao.js";

export class Conta {
    nome: string;
    saldo: number = JSON.parse(localStorage.getItem("saldo")) || 0;
    transacoes: Transacao[] = JSON.parse(localStorage.getItem("transacoes"), (key: string, value: any) => {
        if (key === "data") {
            return new Date("data");
        }
        return value;
    }) || [];

    constructor(nome: string) {
        this.nome = nome;
    };

    debitar(valor: number) {
        if (valor <=0) {
            throw new Error("Valor debitado deve ser maior que zero.");
        }
        if (valor > this.saldo) {
            throw new Error("Saldo insuficiente!")
        }
        this.saldo -= valor;
        localStorage.setItem("saldo", this.saldo.toString());
    };
    
    depositar(valor: number) {
        if (valor <= 0) {
            throw new Error("Valor depositado deve ser maior que zero.");
        }
        this.saldo += valor;
        localStorage.setItem("saldo", this.saldo.toString());
    };

    getSaldo() {
        return this.saldo;
    };

    getDataAcesso(): Date {
        return new Date();
    };

    getGruposTransacoes() : GrupoTransacao[] {
        const gruposTransacoes: GrupoTransacao[] = [];
        const listaTransacoes: Transacao[] = structuredClone(this.transacoes);
        const TransacoesOrdenadas: Transacao[] = listaTransacoes.sort( (t1, t2) => t2.data.getTime() - t1.data.getTime() );
        let labelAtualGrupoTransacao: string = "";

        for (let transacao of TransacoesOrdenadas) {
            let labelGrupoTransacao: string = transacao.data.toLocaleDateString("pt-br", { month: "long", year: "numeric" });

            if (labelAtualGrupoTransacao !== labelGrupoTransacao) {
                labelAtualGrupoTransacao = labelGrupoTransacao;
                gruposTransacoes.push({
                    label: labelGrupoTransacao,
                    transacoes: []
                })
            }
            gruposTransacoes.at(-1).transacoes.push(transacao);
        }
        return gruposTransacoes;
    };

    registrarTransacao(novaTransacao: Transacao): void {
        if (novaTransacao.tipoTransacao == TipoTransacao.DEPOSITO) {
            this.depositar(novaTransacao.valor);
        } 
        else if (novaTransacao.tipoTransacao == TipoTransacao.TRANSFERENCIA || novaTransacao.tipoTransacao == TipoTransacao.PAGAMENTO_BOLETO) {
            this.debitar(novaTransacao.valor);
            novaTransacao.valor *= -1;
        } 
        else {
            throw new Error("Tipo de Transação é inválido!");
        }

        this.transacoes.push(novaTransacao);
        localStorage.setItem("transacoes", JSON.stringify(this.transacoes));
    };

    resumirTransacoes(): ResumoTransacoes {
        const listaTransacoes: Transacao[] = structuredClone(this.transacoes);
        const resumoTransacoes: ResumoTransacoes = {
            totalDepositos: 0,
            totalTransferencias: 0,
            totalPagamentosBoleto: 0
        };        

        for (let transacao of listaTransacoes) {
            switch (transacao.tipoTransacao) {
                case TipoTransacao.DEPOSITO:
                    resumoTransacoes.totalDepositos += transacao.valor;
                    break;
                case TipoTransacao.TRANSFERENCIA:
                    resumoTransacoes.totalTransferencias += transacao.valor;
                    break;
                case TipoTransacao.PAGAMENTO_BOLETO:
                    resumoTransacoes.totalPagamentosBoleto += transacao.valor;
                    break;
            }
        }
        return resumoTransacoes;
    };
};

const conta = new Conta("José Henrique Santos");

export default Conta;
1 resposta
solução!

Já descobri...

Estava dando um "export default Conta" (com "C" maiúsculo) quando deveria dar um "export default conta" (com "c" maiúsculo).

O export deve ser no objeto conta criado a partir da classe e não na classe em si...

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software