1
resposta

Erro no trycatch

Conta.ts:

import { Transacao } from "./Transacao.js";
import { TipoTransacao } from "./TipoTransacao.js";

let saldo: number = 3000;

function debitar(valor: number): void {
  if (valor <= 0) {
    throw new Error("O valor a ser debitado deve ser maior que zero!");
  }
  if (valor > saldo) {
    throw new Error("Saldo insuficiente!");
  }
  saldo -= valor;
}

function depositar(valor: number): void {
  if (valor <= 0) {
    throw new Error("O valor a ser depositado deve ser maior que zero!");
  }
  saldo += valor;
}

const Conta = {
  getSaldo() {
    return saldo;
  },

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

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

    console.log(novaTransacao);
  },
};

export default Conta;

NovaTransacao.ts:

import Conta from "../types/Conta.js";
import { TipoTransacao } from "../types/TipoTransacao.js";
import { Transacao } from "../types/Transacao.js";
import SaldoComponent from "./SaldoConta.js";

const elementoFormulario = document.querySelector(
  ".block-nova-transacao form"
) as HTMLFormElement;

elementoFormulario.addEventListener("submit", function (event) {
  elementoFormulario.addEventListener("submit", function (event) {
    try {
      event.preventDefault();
      if (!elementoFormulario.checkValidity()) {
        alert("Por favor, preencha todos os campos da transação!");
        return;
      }

      const inputTipoTransacao = elementoFormulario.querySelector(
        "#tipoTransacao"
      ) as HTMLSelectElement;
      const inputValor = elementoFormulario.querySelector(
        "#valor"
      ) as HTMLInputElement;
      const inputData = elementoFormulario.querySelector(
        "#data"
      ) as HTMLInputElement;

      let tipoTransacao: TipoTransacao =
        inputTipoTransacao.value as TipoTransacao;
      let valor: number = inputValor.valueAsNumber;
      let data: Date = new Date(inputData.value + " 00:00:00");

      const novaTransacao: Transacao = {
        tipoTransacao: tipoTransacao,
        valor: valor,
        data: data,
      };

      Conta.registrarTransacao(novaTransacao);
      SaldoComponent.atualizar();
      elementoFormulario.reset();
    } catch(erro){
      alert(erro.message);
    }
  });
});

Nesta parte: 'catch(erro){ alert(erro.message); }' esta dando o seguinte error: 'erro' is of type 'unknown'. Já mudei para 'cathc(erro: Error){ alert(erro.message);}' mas da outro error: 'Catch clause variable type annotation must be 'any' or 'unknown' if specified. Ai mudei para ''cathc(erro: any){ alert(erro.message);}' não da erro, mas não mostra os erros. Como fazer a tranferência de 5000 reais sendo que na conta possui 3000 que tratei no arquivo Conta.ts.

Alguém pode me ajudar??

1 resposta

E aí, Estudante!

No TypeScript, quando você usa o catch em um bloco try-catch, o tipo da variável de erro precisa ser do tipo any ou unknown se você não souber exatamente qual é o tipo do erro. Mas se você quer ser mais específico e tratar erros específicos, precisa adicionar um tipo ao erro.

Parece que você já tentou isso, mas para lidar com o erro específico gerado pelo throw new Error("Saldo insuficiente!");, você pode fazer algo assim:

catch (erro: unknown) {
  if (erro instanceof Error) {
    alert(erro.message);
  } else {
    // Se não for um objeto do tipo Error, faça algo aqui
    console.error("Erro desconhecido:", erro);
  }
}

Isso verifica se o objeto de erro é uma instância da classe Error antes de tentar acessar a propriedade message. Isso pode ajudar a resolver o problema do tipo.

Sobre a questão da transferência de 5000 reais com saldo de 3000, seu código atual está tratando isso corretamente ao lançar um erro. Se você quer uma mensagem mais específica, pode personalizar a mensagem no throw new Error("Saldo insuficiente!");.