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

Erro Aula 4, Exercício 8 - Property 'forEach' does not exist on type 'void | Negociacao[]'. Property 'forEach' does not exist on type 'void'.

Tive que ajustar o retorno da obterNegociacoes da classe NegociacaoService que ficou da seguinte forma:

    obterNegociacoes(handler: HandlerFunction): Promise<void | Negociacao[]> {

        return fetch('http://localhost:8080/dados')
            .then(res => handler(res))
            .then(res => res.json())
            .then((dados: NegociacaoParcial[]) => 
                dados
                    .map(dado => new Negociacao(new Date(), dado.vezes, dado.montante))     
            )
            .catch(err => console.log(err));
    }

Este ajuste foi necessário para resolver o erro Type 'Promise<void | Negociacao[]>' is not assignable to type 'Promise<Negociacao[]>'. Type 'void | Negociacao[]' is not assignable to type 'Negociacao[]'. Type 'void' is not assignable to type 'Negociacao[]'.

Entretanto, agora no método importaDados da classe NegociacaoController ocorre o seguinte problema Property 'forEach' does not exist on type 'void | Negociacao[]'. Property 'forEach' does not exist on type 'void'.

this._service
            .obterNegociacoes(res => {
                if (res.ok) return res;
                throw new Error(res.statusText);
            })
            .then(negociacoes => {
                    negociacoes.forEach(negociacao => 
                    this._negociacoes.adiciona(negociacao));
                this._negociacoesView.update(this._negociacoes);
            });

Como proceder?

1 resposta
solução!

Boa noite, Douglas! Como vai?

A forma mais simples de resolver isso é modificar o método obterNegociacoes() da classe NegociacaoService para manter o tipo de retorno como Promise<Negociacao[]>.

obterNegociacoes(handler: HandlerFunction): Promise<Negociacao[]> {

        return fetch('http://localhost:8080/dados')
            .then(res => handler(res))
            .then(res => res.json())
            .then((dados: NegociacaoParcial[]) => 
                dados
                    .map(dado => new Negociacao(new Date(), dado.vezes, dado.montante))     
            )
            .catch(err => { 
                console.log(err);
                return [];
            });
}

Veja se dessa forma as coisas funcionam como vc esperava!

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!