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

Erro método Adiciona da classe Negociacoes

Eu segui os passos igual ao professor, porém o console diz que o método adiciona que eu chamei na classe NegociacaoController está indefinido.

mensagem de erro:

Uncaught TypeError: Cannot read properties of undefined (reading 'adiciona')
    at NegociacaoController.adiciona (negociacao-controller.js:11:26)
    at HTMLFormElement.<anonymous> (app.js:6:16)
adiciona @ negociacao-controller.js:11
(anonymous) @ app.js:6

Arquivo negociacoes.ts

import { Negociacao } from "./negociacao.js";

export class Negociacoes {
  private negociacoes: Array<Negociacao> = [];

  adiciona(negociacao: Negociacao) { //Somente é preciso especificar o retorno em métodos que precisam de retorno
    this.negociacoes.push(negociacao);
  }

  lista(): Array<Negociacao> {
    return this.negociacoes;
  }
}

arquivo negociacao-controller.ts

import { Negociacao } from "../models/negociacao.js";
import { Negociacoes } from "../models/negociacoes.js";

export class NegociacaoController {
  private inputData: HTMLInputElement;
  private inputQuantidade: HTMLInputElement;
  private inputValor: HTMLInputElement;
  private negociacoes: Negociacoes;

  constructor() {
    this.inputData = document.querySelector("#data");
    this.inputQuantidade = document.querySelector("#quantidade");
    this.inputValor = document.querySelector("#valor");
  }

  adiciona(): void {
    const negociacao = this.criaNegociacao();
    //console.log("negociacao", negociacao);
    this.negociacoes.adiciona(negociacao);
    console.log("Lista de negociacoes: ", this.negociacoes.lista());
    this.limparFormulário();
  }

  criaNegociacao(): Negociacao {
    const exp = /-/g; // Expressão regular sempre é iniciada com //, encontra todos os '-' quando colocamos o 'g' ao lado
    const date = new Date(this.inputData.value.replace(exp, ","));
    const quantidade = parseInt(this.inputQuantidade.value);
    const valor = parseFloat(this.inputValor.value);
    return new Negociacao(date, quantidade, valor);
  }

  limparFormulário(): void {
    this.inputData.value = "";
    this.inputQuantidade.value = "";
    this.inputValor.value = "";
    this.inputData.focus();
  }
}

arquivo app.ts

import { NegociacaoController } from "./controllers/negociacao-controller.js";

const controller = new NegociacaoController();
const form = document.querySelector('.form');
form.addEventListener('submit', event => {
    event.preventDefault(); //Não deixa a página atualizar sempre
    controller.adiciona();
})
1 resposta
solução!

Olá Guilherme Augusto.

Na classe NegociacaoController você declarou a variável negociacoes mas não inicializou ela.

Apenas declarando a variável: private negociacoes: Negociacoes;

Declarando e inicialização a variável: private negociacoes: Negociacoes = new Negociacoes();

Você poderá conferir na aula "Um problema não esperado" No tempo: 1:05

import { Negociacao } from "../models/negociacao.js";
import { Negociacoes } from "../models/negociacoes.js";

export class NegociacaoController {
  private inputData: HTMLInputElement;
  private inputQuantidade: HTMLInputElement;
  private inputValor: HTMLInputElement;
  private negociacoes: Negociacoes = new Negociacoes();

  constructor() {
    this.inputData = document.querySelector("#data");
    this.inputQuantidade = document.querySelector("#quantidade");
    this.inputValor = document.querySelector("#valor");
  }

  // Restante do código....