3
respostas

ERRO Async/await - [ts] A propriedade 'filter' não existe no tipo 'void | Negociacao[]'.

Esse erro apareceu no meu código quando implementei o recurso Async/await, conforme ensinado no vídeo pelo professor Flávio.

Consegui resolver esse problema realizando as seguintes alterações:

NegociaçãoService.ts

import { NegociacaoParcial, Negociacao } from '../models/index';

export class NegociacaoService {

    obterNegociacoes(handler: Function): 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 []
            });
    }
}

NegociacaoController.ts

    @throttle()
    async importaDados() {

        try {

           // usou await antes da chamada de this.service.obterNegociacoes()

            const negociacoesParaImportar = await this._service
                .obterNegociacoes((res: Response) => {

                    if(res.ok) {
                        return res;
                    } else {
                        throw new Error(res.statusText);
                    }
                });

            const negociacoesJaImportadas = this._negociacoes.paraArray();

            negociacoesParaImportar
                .filter((negociacao: Negociacao) => 
                    !negociacoesJaImportadas.some(jaImportada => 
                        negociacao.ehIgual(jaImportada)))
                .forEach((negociacao: Negociacao) => 
                this._negociacoes.adiciona(negociacao));

            this._negociacoesView.update(this._negociacoes);

        } catch(err) {
            this._mensagemView.update(err.message);
        }
    }

Se alguém estiver com esse mesmo erro, espero que esse tópico ajude!

3 respostas

Oi, Thiago, tudo bem?

obrigada por compartilhar sua solução conosco! ela é de extrema valia :}

Bons estudos!

Oi Thiago.. valeu o feedback.. Olhei seu codigo e pelo que entendi, vc trocou o 'throw new Error' de NegociacaoService por []. É isso amigão? Enfim... Estou perguntando porque no meu, o problema de A propriedade 'filter' não existe no tipo 'void | Negociacao[]'. era porque havia definido pessoalmente no generic na classe NegociacaoService: <void | Negociacao[]>.

Antes: NegociacaoService.ts

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

Depois: NegociacaoService.ts

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

        return fetch('http://localhost:8080/dados')
            .then(resposta => handler(resposta))
            .then(resposta => resposta.json())
            .then((dados: NegociacaoParcial[]) =>
                dados
                    .map(dado => new Negociacao(new Date(), dado.vezes, dado.montante))
            )
            .catch(erro => {
                console.log(erro);
                throw new Error('Não foi possível importar as negociações');/
            });

    }

Obrigado por compartilhar a informação.