3
respostas

erro parametro Promise

No meu projeto quando declaro o método

   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));
    }
}

é acusado o erro:

"[ts] O tipo 'Promise<void | Negociacao[]>' não pode ser atribuído ao tipo 'Promise<Negociacao[]>'. O tipo 'void | Negociacao[]' não pode ser atribuído ao tipo 'Negociacao[]'. O tipo 'void' não pode ser atribuído ao tipo 'Negociacao[]'. function fetch(input?: string | Request | undefined, init?: RequestInit | undefined): Promise"

Poderiam me ajudar?

3 respostas

Fala aí Paula, tudo bem? Essa deve ser uma nova validação do TypeScript, caso sua Promise dê algum erro e caia no .catch você não vai devolver nada, no caso void.

Então você tem dois tipos possíveis de retorno void e um array de Negociacao, portanto, na sua função poe assim:

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

Espero ter ajudado

Tive o mesmo erro e resolvi com a ajuda do Matheus, mas agora o problema é no forEach da classe NegociacaoController. Fala que forEach não existe no tipo void.

Método obterNegociacoes

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

Método importarDados

    importarDados() {

        function isOk(res: Response) {

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

        this._service
            .obterNegociacoes(isOk)
            .then(negociacoes =>
                negociacoes.forEach(negociacao =>
                    this._negociacoes.adiciona(negociacao)));

    }

Como resolver?

Fala aí Breno, beleza? Tente deixar explicito o tipo do parâmetro da sua Promise:

this._service
    .obterNegociacoes(isOk)
    .then((negociacoes: Negociacao[]) =>
        negociacoes.forEach(negociacao =>
            this._negociacoes.adiciona(negociacao)));

Espero ter ajudado

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software