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

Erro ao criar o NegociacaoService

Ao criar o NegociacaoService, conforme código a seguir:

import { Negociacao, NegociacaoParcial } 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));
    }
}

Estou recebendo 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[]'.ts(2322)

E caso eu altere o tipo do Promise para Promise<void | Negociacao[]> eu passo a receber erro no NegociacaoController ao usar o NegociacaoService, conforme abaixo:

Property 'forEach' does not exist on type 'void | Negociacao[]'.
  Property 'forEach' does not exist on type 'void'.ts(2339)
3 respostas

Fala ai João, tudo bem? Para eu simular esse problema na minha máquina vai ser um pouco mais chato, preciso ter algumas classes e tals.

Por conta disso, posso te pedir um favor? Compartilha o projeto completo comigo, assim eu consigo simular o problema por aqui e analisá-lo com mais calma.

Pode compartilhar através do Github ou Google Drive (zipado).

Fico no aguardo.

solução!

Matheus, Eu identifiquei o problema. Apesar da versão do typescript definido no package.json ser a 2.3.2, o VSCode estava tentando utilizar a versão 3.7.3. Bastou alterar a versão para 2.3.2 e o código compilou. Agora não entendi o motivo de não compilar em uma versão mais recente. obs.: o código utilizado foi o baixado no próprio curso TypeScript Parte 2.

Boa João, fico feliz que tenha resolvido seu problema, sempre esqueço que por padrão o VS Code usa um binário do TypeScript diferente do projeto.

Agora não entendi o motivo de não compilar em uma versão mais recente

Provavelmente tenha mudado alguma coisa nas versões novas, que não eram mais compatíveis com a versão do curso, afinal, a diferença de versão é bem grande.

Sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.