Tengo un código Typycript que reúne los pasos de un formulario y me está dando un error en la hora de construcción, esta es la función y me está dando un error en la línea:

Formas SETVISITEDES ((Formas VisionForms) => [... formas Vides, ActuNIndex] .sort ((x, y) => x - y));

  const push = useCallback(
    (form = nextForm) => {
      if(!!currentForm) {
        const currentIndex = forms.indexOf(currentForm);
        if (currentIndex >= 0) {
          setVisitedForms((seenForms) => [...seenForms, currentIndex].sort((x, y) => x - y));
        }
        history.push(`${baseurl}${form}`);
      }
    },
    [baseurl, history, nextForm, currentForm, forms, setVisitedForms]
  );

Este es el error que aparece en la consola. ¿Alguien sabe lo que estoy haciendo mal?

Argument of type '(seenForms: never[]) => number[]' is not assignable to parameter of type 'SetStateAction<never[]>'.
0
CodeG 8 jun. 2021 a las 21:59

3 respuestas

La mejor respuesta

Parece que no tiene la intención de que el tipo de visitedForms sea never[], pero escribió:

const [visitedForms, setVisitedForms] = useState([])

Lo que infiere el tipo never[] del valor predeterminado [].

En su lugar, anotará useState con el tipo previsto:

const [visitedForms, setVisitedForms] = useState<number[]>([])
1
Ben West 8 jun. 2021 a las 20:49

Esta es la definición de setstTeaction.

type SetStateAction<S> = S | ((prevState: S) => S);

Eso significa que el argumento a las formas de setvisited tiene que ser de tipo S o tiene que ser una función que acepta Tipo S y devuelve Tipo S.

S es un genérico. Puedes leer sobre ellos en los documentos de TypScript.

TypScript Piensa que las formas de Vence es una matriz vacía: never[], y actualEndex es un número. La devolución de llamada SETVISITEDFORS tiene que devolver el mismo tipo que recibe, lo que en su caso es never[], pero dado que CoundIndex es un número que devuelve number[]. Debe corregir las formas de setvisitedmits para que sea lo que pase a la devolución de llamada es el tipo number[].

0
Charles Bamford 8 jun. 2021 a las 19:17

Debe agregar un tipo para el argumento seenForms. En este caso number[]

setVisitedForms((seenForms: number[]) => [...seenForms, currentIndex].sort((x, y) => x - y));
0
Nidin Vinayakan 8 jun. 2021 a las 19:33