Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

NegociacoesView.ts apresenta erro

Olá! Segui as orientações dada e o código apesenta o seguinte erro:

app/ts/views/NegociacoesView.ts(32,46): error TS2339: Property 'data' does not exist on type 'Negociacoes'.
app/ts/views/NegociacoesView.ts(32,75): error TS2339: Property 'data' does not exist on type 'Negociacoes'.
app/ts/views/NegociacoesView.ts(32,108): error TS2339: Property 'data' does not exist on type 'Negociacoes'.
app/ts/views/NegociacoesView.ts(33,46): error TS2339: Property 'quantidade' does not exist on type 'Negociacoes'.
app/ts/views/NegociacoesView.ts(34,46): error TS2339: Property 'valor' does not exist on type 'Negociacoes'.
app/ts/views/NegociacoesView.ts(35,46): error TS2339: Property 'volume' does not exist on type 'Negociacoes'.

Tentei comprar o código que escrevi com o fornecido e não consegui localizar o erro:

NegociacaoController.ts

class NegociacaoController {
    private _inputData: HTMLInputElement;
    private _inputQuantidade: HTMLInputElement;
    private _inputValor: HTMLInputElement;
    private _negociacoes = new Negociacoes();
    private _negociacoesView = new NegociacoesView('#negociacoesView');

    constructor() {
        this._inputData = <HTMLInputElement>document.querySelector('#data');
        this._inputQuantidade = <HTMLInputElement>document.querySelector('#quantidade');
        this._inputValor = <HTMLInputElement>document.querySelector('#valor');
        this._negociacoesView.update(this._negociacoes);
    }

    adiciona(event: Event) {
        event.preventDefault();
        const negociacao = new Negociacao(
            new Date(this._inputData.value.replace(/-/g, ',')),
            parseInt(this._inputQuantidade.value),
            parseFloat(this._inputValor.value)
        );

        this._negociacoes.adiciona(negociacao);
        this._negociacoesView.update(this._negociacoes);
    }
}

Negociacao.ts

class Negociacao {

    constructor (private _data: Date, private _quantidade: number, private _valor: number) {}

    get data () {
        return this._data;
    }

    get quantidade () {
        return this._quantidade;
    }

    get valor () {
        return this._valor;
    }

    get volume () {
        return this._quantidade * this._valor;
    }
} 

Negociacoes.ts

class Negociacoes {
    private _negociacoes: Negociacao[] = [];

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

    paraArray(): Negociacoes[] {
        return [].concat(this._negociacoes);
    }
}

NegociacoesView.ts

class NegociacoesView {

    private _elemento: Element;

    constructor(seletor: string) {

        this._elemento = document.querySelector(seletor);
    }

    update(model: Negociacoes): void {

        this._elemento.innerHTML = this.template(model);
    }

    template(model: Negociacoes): string {

        return `
        <table class="table table-hover table-bordered">
            <thead>
                <tr>
                    <th>DATA</th>
                    <th>QUANTIDADE</th>
                    <th>VALOR</th>
                    <th>VOLUME</th>
                </tr>
            </thead>

            <tbody>
                ${model.paraArray().map(negociacao => 
                     `
                        <tr>
                            <td>${negociacao.data.getDate()}/${negociacao.data.getMonth() +1}/${negociacao.data.getFullYear()}</td>
                            <td>${negociacao.quantidade}</td>
                            <td>${negociacao.valor}</td>
                            <td>${negociacao.volume}</td>
                        <tr>
                     `   
                ).join('')}            
            </tbody>

            <tfoot>
            </tfoot>
        </table> 
        `;
    }
}

Fim do index.html

    <script src="js/models/Negociacao.js"></script>    
    <script src="js/controllers/NegociacaoController.js"></script>
    <script src="js/models/Negociacoes.js"></script>
    <script src="js/views/NegociacoesView.js"></script>
    <script src="js/app.js"></script>
</body>
</html>

Será que alguém consegue ver o erro? Por favor! Obrigado

3 respostas

Oi, Mauricio, tudo bem?

Veja se a falta do return na sua template string em NegocicacoesView.ts permite corrigir esse erro:

${model.paraArray().map(negociacao => 
           return          `
                        <tr>
                            <td>${negociacao.data.getDate()}/${negociacao.data.getMonth() +1}/${negociacao.data.getFullYear()}</td>
                            <td>${negociacao.quantidade}</td>
                            <td>${negociacao.valor}</td>
                            <td>${negociacao.volume}</td>
                        <tr>
                     `   
                ).join('')}            
            </tbody>

Testa e me fala se deu certo :}

Olá, Laís! Obrigado pelo feedback! Eu testei com o return e continua com erro. Fui no vídeo da aula (https://cursos.alura.com.br/course/typescript-parte1/task/27069) para ver a transcrição e o vídeo, parece que bate o código. Dei um dia de "descanso" que as vezes é necessário para programar hahahahahhaha. Enfim, o erro é o mesmo ainda: app/ts/views/NegociacoesView.ts(32,46): error TS2339: Property 'data' does not exist on type 'Negociacoes'. app/ts/views/NegociacoesView.ts(32,75): error TS2339: Property 'data' does not exist on type 'Negociacoes'. app/ts/views/NegociacoesView.ts(32,108): error TS2339: Property 'data' does not exist on type 'Negociacoes'. app/ts/views/NegociacoesView.ts(33,46): error TS2339: Property 'quantidade' does not exist on type 'Negociacoes'. app/ts/views/NegociacoesView.ts(34,46): error TS2339: Property 'valor' does not exist on type 'Negociacoes'. app/ts/views/NegociacoesView.ts(35,46): error TS2339: Property 'volume' does not exist on type 'Negociacoes'.

Não consigo ver o erro ainda! Vou checar tudo novamente!

solução!

Hoje eu consegui ler o código com calma e comparar com a versão do site... depois de muito custo, descobri o erro em 'Negociacoes.ts'. Eu fiz:

paraArray(): Negociacoes[] {
        return [].concat(this._negociacoes);
    }

O correto é:

paraArray(): Negociacao[] {
        return [].concat(this._negociacoes);
    }