1
resposta

Lista não retorna os objetos da classe Negociações.

Na minha classe negociação-controller.ts no método Adiciona(), ele não adiciona ao atributo, negociações, o Array com os objetos de Negociação. A única maneira que obtive um retorno e que realmente os objetos foram salvos nesse array, foi quando na classe Negociações eu deixei o atributo estático, assim: negociacoes.ts

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

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

    adiciona(negociacao: Negociacao)
    {
        Negociacoes.negociacoes.push(negociacao);
    }

    lista(): ReadonlyArray<Negociacao>
    {
        return [...Negociacoes.negociacoes];
    }
}

mas quando é gerado o arquivo .JS percebi que o atributo fica fora da classe, esse tipo de atributo fora da classe pode acabar sendo manipulado, correto ? Com o código antigo eu não consigo um retorno desse Array preenchido, é como se toda vez ele criasse um novo Objeto de Negociações e colocasse lá o Array e retornasse só essa instância, será só eu que estou com esse problema ? .

segue código antigo:

negociacoes.ts

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

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

    adiciona(negociacao: Negociacao)
    {
        this.negociacoes.push(negociacao);
    }

    lista(): ReadonlyArray<Negociacao>
    {
        return [...this.negociacoes];
    }
}

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 = new Negociacoes();


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

    adiciona(): void
    {
        const negociacao = this.criaNegociacao();
        this.negociacoes.adiciona(negociacao);
        // console.log(this.negociacoes.pop());
        console.log(this.negociacoes.lista());
        this.limparFormulario();
    }

    criaNegociacao(): Negociacao
    {
        const exp = /-/g;
        const date = new Date(this.inputData.value.replace(exp, ','));
        const quantidade = parseInt(this.inputQuantidade.value);
        const valor = parseFloat(this.inputValor.value);

        return new Negociacao( //retorna um objeto de Negociação
            date, //input de data
            quantidade, //input de quantidade
            valor //input de valor
        ); 
    }

    limparFormulario(): void
    {
        this.inputData.value = '';
        this.inputQuantidade.value = '1';
        this.inputValor.value = '0.0';

        this.inputData.focus();
    }
}
1 resposta

O TypeScript não impede o código transformado para ECMAScript de ser vulnerável, ele só atenua os erros de codificação que podem ser escritos pelo desenvolvedor em ambiente de desenvolvimento, ou seja, o TypeScript basicamente ajuda o programador a escrever um código melhor e sem erros no ambiente de desenvolvimento, mas ele não gera um código que não seja vulnerável no ambiente de produção.