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

Não consigo resolver o problema do método do meu NegociacaoService, erro de compilação no Promise

Da erro de compilação quando o método esta assim: obterNegociacoes(handler: Function): Promise<Negociacao[]>

erro: Type 'Promise<void | Negociacao[]>' is not assignable to type 'Promise<Negociacao[]>'.\n Type 'void | Negociacao[]' is not assignable to type 'Negociacao[]'.\n Type 'void' is not assignable to type 'Negociacao[]'.", "source": "ts", "startLineNumber": 7, "startColumn": 9, "endLineNumber": 14, "endColumn": 45 }

ou quando passo ele para obterNegociacoes(handler: Function): Promise<void | Negociacao[]>

o erro no terminal é esse e a class NegociacaoController da esse erro: app/ts/controllers/NegociacaoController.ts(79,29): error TS2339: Property 'forEach' does not exist on type 'void | Negociacao[]'. [0] Property 'forEach' does not exist on type 'void'. [0] app/ts/controllers/NegociacaoController.ts(79,37): error TS7006: Parameter 'negociacao' implicitly has an 'any' type. [0] 16:25:39 - Compilation complete. Watching for file changes.

código completo negociacaoService:

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

export class NegociacaoService {

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

}

código com do método da class NegociacaoController:

importaDados() {

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

            this._negociacoesView.update(this._negociacoes);
        });
}
3 respostas
solução!

Fala ai Valdemar, tudo bem? Tente tipar o retorno da função obterNegociacoes dentro da NegociacaoController, nesse trecho:

this._service
        .obterNegociacoes(isOk)
        .then(negociacoes => { // tente tipar esse parâmetro
            negociacoes.forEach(negociacao => 
                this._negociacoes.adiciona(negociacao));

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

No caso, tente informar que o parâmetro negociacoes é um array de Negociacao:

this._service
        .obterNegociacoes(isOk)
        .then((negociacoes: Negociacao[]) => { // tente tipar esse parâmetro
            negociacoes.forEach(negociacao => 
                this._negociacoes.adiciona(negociacao));

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

Espero ter ajudado.

Esta correto, o projeto compila e esta funcionando normal. Obrigado!!

Magina Valdemar, sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.