Je suis relativement nouveau sur TS et je rencontre un problème étrange. Je semble avoir tout défini, mais il ne semble pas reconnaître ma saisie pour les données.
Voici ce que j'ai:
const Component = () => {
const [data, setData] = React.useState([[], []])
React.useEffect(() => {
fetchData()
}, [])
const fetchData = React.useCallback(async () => {
const data = await fetchDataController()
setData(data)
^^^^ error
})
}
Cela jette l'erreur,
Argument of type 'Element[][]' is not assignable to parameter of type 'SetStateAction<never[][]>'
Type 'Element[][]' is not assignable to type 'never[][]'
Type 'Element[]' is not assignable to type 'never[]'
Type 'Element is not assignable to type 'never'
Ma fonction fetchDataController
renvoie un tableau de tableaux d'éléments.
Mon type est le suivant:
type TData = {
id: string,
desc: string
}
J'ai essayé de faire quelque chose comme,
const [data, setData] = React.useState<Array<TData[], TData[]>>([[], []])
Mais cela ne semble pas fonctionner. Qu'est-ce que j'oublie ici?
Vous étiez proche. Array<...>
nécessite un argument, le type d'éléments dans le tableau. Vous pourriez donc faire quelque chose comme Array<TData[]>
. Si vous ne souhaitez pas utiliser Array<...>
, vous pouvez faire quelque chose comme TData[][]
aussi bien
Alors,
React.useState<TData[][]>([[], []])
Voici un code de travail et une boîte avec quelques simulacres
Si vous voulez être plus spécifique et le définir comme un Tuple , au lieu d'un tableau habituel:
React.useState<[TData[], TData[]]>([[], []])
mais pour que cela fonctionne, vous devrez assurer Typescript que ce que vous définissez c'est- data
à- dire dans setData(data)
est également de type [TData[], TData[]]
.
Vous pouvez le faire avec quelque chose comme setData(data as [TData[], TData[]])
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots