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

[Bug] Aula 2.4 - Erro de tipo na função setListaEventos

Fiz o código da aula citada no título, mas quando tentei rodar recebi esse erro:

TS2345: Argument of type '(listaAntiga: IEvento[]) => (IEvento | IEvento[])[]' is not assignable to parameter of type 'IEvento[] | ((currVal: IEvento[]) => IEvento[])'.
  Type '(listaAntiga: IEvento[]) => (IEvento | IEvento[])[]' is not assignable to type '(currVal: IEvento[]) => IEvento[]'.

O trecho de código em questão:

  const setListaDeEventos = useSetRecoilState<IEvento[]>(listaDeEventosState)

  const alterarStatus = () => {
    const eventoAlterado = {
      ...evento
    }

    eventoAlterado.completo = !eventoAlterado.completo;

    setListaDeEventos(listaAntiga => {
      const indice = listaAntiga.findIndex(evt => evt.id === evento.id)
      return [...listaAntiga.slice(0, indice), eventoAlterado, listaAntiga.slice(indice + 1)]
    })
  }

Versões dos programas/pacotes: "recoil": "^0.7.6", "react": "^17.0.2", node --version: v18.14.0 npm -v: 9.3.1

Onde e como eu devo corrigir essa tipagem?

2 respostas
solução!

Olá, Salustiano!

O problema não é a tipagem, ela está correta.

Porém, no seu retorno, faltou aplicar o spread operator no segundo slice da lista, assim:

      return [...listaAntiga.slice(0, indice), evento, ...listaAntiga.slice(indice + 1)]

No terceiro parâmetro, viu ali?

Vê se é mesmo isso e qualquer coisa posta aqui pra gente resolver junto :)

Era isso mesmo. Acabei errando na declaração do return e isso causou o erro. Muito obrigado