Erreur de type "l'argument de type n'est pas attribuable au paramètre de type"

Mike K:

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 fetchDataControllerrenvoie 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?

tanmay:

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.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    Filtrer le dataframe basé sur plusieurs colonnes d'un autre dataframe

  2. 2

    Laravel SQLSTATE [HY000] [1049] Base de données inconnue 'previous_db_name'

  3. 3

    Enregistrer le chemin de l'image de la galerie vers la base de données de la salle et l'afficher dans la liste des recycleurs

  4. 4

    Comment afficher du texte au milieu de div avec une couleur d'arrière-plan différente?

  5. 5

    Microsoft.WebApplication.targets

  6. 6

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  7. 7

    Échec de l'exécution de 'insertBefore' sur 'Node': le paramètre 1 n'est pas de type 'Node'

  8. 8

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  9. 9

    Comment analyser un fichier avec un tableau d'objets JSON en utilisant Node.js?

  10. 10

    comment afficher un bouton au-dessus d'un autre élément ?

  11. 11

    Comment centrer un div tout en utilisant la transition et transformer avec l'échelle

  12. 12

    Filtrer les données en fonction des conditions d'une trame de données

  13. 13

    ESP8266 HADRWARE MINUTERIE, USA pour cocher une macro étrange

  14. 14

    Comment définir du texte dans un QLabel et afficher les caractères '<>'?

  15. 15

    System.Data.SqlClient.SqlException: 'Nom de colonne non valide' ApplicationRoleId '.'

  16. 16

    Pourquoi Phantomjs ne fonctionne pas avec ce site ?

  17. 17

    Stop jQuery execution after one time execution

  18. 18

    Concaténer des variables dans ansible

  19. 19

    Comment calculer la probabilité du graphique de densité?

  20. 20

    php ajouter et fusionner des données de deux tables

  21. 21

    Redirection HTTP vers HTTPS dans Java à l'aide de HTTPURLConnection

chaudétiquette

Archive