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

Filter não compila

Olá,

O parte de obterNegociacoes está apresentando erros em "filter(negociacao... " e em ".forEach(negociacao..."

Parameter 'negociacao' implicitly has an 'any' type. Property 'filter' does not exist on type 'void | Negociacao[]'. Property 'filter' does not exist on type 'void'.

Mesmo ajustando para ".filter((negociacao: Negociacao)..." o erro "Property 'filter' does not exist on type 'void | Negociacao[]'." ainda persiste.

Como resolver?

Obrigado.

this._service
            .obterNegociacoes(res => {

                if(res.ok) {
                    return res;
                } else {
                    throw new Error(res.statusText);
                }
            })
            .then(negociacoesParaImportar => {

                const negociacoesJaImportadas = this._negociacoes.paraArray();

                negociacoesParaImportar
                        //ERRO  AQUI
                    .filter(negociacao => 
                        !negociacoesJaImportadas.some(jaImportada => 
                            negociacao.ehIgual(jaImportada)))
                    //E  AQUI
                    .forEach(negociacao => 
                    this._negociacoes.adiciona(negociacao));

                this._negociacoesView.update(this._negociacoes);
            });
4 respostas

Fala aí Marcio, tudo bem? Precisa ver como está tipado o retorno da função paraArray, o TypeScript não está entendo que é um array, por isso, está dando esse erro.

Espero ter ajudado.

solução!

Boa noite, Marcio! Como vai?

Tente fazer o código da forma a seguir e veja se resolve o seu problema:

this._service
            .obterNegociacoes(res => {

                 // Restante do código omitido.
            })
            .then((negociacoesParaImportar: Negociacao[]) => {

                 // Restante do código omitido.
            });

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Boa noite srs,

A solução do Gabriel resolveu o problema com esse tipo de implementação.

.then((negociacoesParaImportar: Negociacao[]) => {...

Localizei a causa do erro, no método obterNegociacoes do NegociaoService precisei colocar também o retorno "void" pois estava dando erro de compilação no bloco catch por não estar retornando nada:

obterNegociacoes(handler: ResponseHandler): 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));

    }

Obrigado pessoal.

Por nada, Marcio! Sempre que precisar de alguma ajuda é só mandar aqui no fórum da Alura!

Agora é só seguir em frente rumo à luz do conhecimento!

Grande abraço e bons estudos, meu aluno!