Não consegui implementar o catch na classe NegociacaoService ao tentar fazê-lo o VSCode me retorna o seguinte 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[]'.
Porém, se eu implementar o mesmo catch na classe NegociacaoController funciona normalmente. Não encontrei o que fiz de errado.
Seguem as classes citadas:
import { Negociacao, NegociacaoParcial } from '../models/index'
export class NegociacaoService {
obterNegociacoes(handler: ResponseHandler): 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));
}
}
export interface ResponseHandler {
(res: Response): Response;
}
import { Negociacoes, Negociacao, NegociacaoParcial } from '../models/index';
import { NegociacoesView, MensagemView } from '../views/index';
import { domInject, throttle, imprime } from '../helpers/index';
import { NegociacaoService } from '../services/index';
export class NegociacaoController {
@domInject('#data')
private _inputData: JQuery;
@domInject('#quantidade')
private _inputQuantidade: JQuery;
@domInject('#valor')
private _inputValor: JQuery;
private _negociacoes = new Negociacoes();
private _negociacoesView = new NegociacoesView('#negociacoesView');
private _mensagemView = new MensagemView('#mensagemView');
private _service = new NegociacaoService();
constructor() {
this._negociacoesView.update(this._negociacoes);
}
@throttle()
adiciona() {
let data = new Date(this._inputData.val().replace(/-/g, ','));
if (!this.ehDiaUtil(data)) {
this._mensagemView.update('Por favor, realize negociações apenas em dias úteis!');
return;
}
const negociacao = new Negociacao(
data,
parseInt(this._inputQuantidade.val()),
parseFloat(this._inputValor.val())
);
this._negociacoes.adiciona(negociacao);
this._negociacoesView.update(this._negociacoes);
this._mensagemView.update('Negociação adicionada com sucesso');
imprime(negociacao, this._negociacoes);
}
private ehDiaUtil(data: Date): boolean {
return (data.getDay() != DiaDaSemana.Sabado && data.getDay() != DiaDaSemana.Domingo);
}
@throttle()
importar() {
this._service.obterNegociacoes(res => {
if (res.ok) return res;
else throw new Error(res.statusText);
})
.then(negociacoesParaImportar => {
const negociacoesJaImportadas = this._negociacoes.paraArray;
negociacoesParaImportar.filter(negociacao =>
!negociacoesJaImportadas.some(jaImportada =>
negociacao.ehIgual(jaImportada))
).forEach(negociacao =>
this._negociacoes.adiciona(negociacao));
this._negociacoesView.update(this._negociacoes);
})
.catch(err => console.log(err));
}
}
enum DiaDaSemana {
Domingo,
Segunda,
Terca,
Quarta,
Quinta,
Sexta,
Sabado
}