51 votes

Comment corriger l'élément Binding 'children' qui a implicitement un type 'any'.ts(7031) ?

Il me manque quelque chose ici avec la validation : comment ajouter la validation des types ? J'ai une erreur "l'élément 'children' a implicitement un type 'any'".

import * as React from 'react';
import Button from './Styles';

const Button1 = ({ children, ...props }) => (
  <Button {...props}>{children}</Button>
);

Button1.propTypes = {};

export default Button1;

0 votes

@BoyWithSilverWings presque mais pas vraiment, car cette question concerne les propTypes et ce que le type devrait être, celle-ci concerne les typescript et ce qui cause cette erreur.

0 votes

69voto

Lukáš Gibo Vaic Points 394

Oui, il vous manque un type pour Props as whole, ce qui signifie que typescript le voit comme any et vos règles de sécurité ne le permettent pas.

Vous devez taper vos accessoires comme :

import React, { FC } from "react";

interface Props {
    // any props that come into the component
}

const Button1: FC<Props> = ({ children, ...props }) => (
    <Button {...props}>{children}</Button>
);

1 votes

Pourquoi cela s'appelle-t-il IProps et pas seulement Props ? (Je suis tout nouveau sur TS, je ne conteste pas, je demande simplement).

3 votes

@FMD C'est juste une question de nom, nous avions l'habitude de taper I devant chaque nom d'interface, mais avec le temps nous ne le faisons plus.

16voto

Hung Ton Points 161

Vous pouvez également ajouter le type prédéfini à vos composants fonctionnels comme ceci :

const Button1: React.FC<{}>  = ({ children }) => (
    <Button>{children}</Button>
);

De cette façon, vous n'avez pas à vous répéter pour définir children accessoires.

La version plus complète pourrait être la suivante :

interface Props {
// any other props that come into the component, you don't have to explicitly define children.
}

const Button: React.FC<Props> = ({ children, ...props }) => {
  return (
      <Button {...props}>{children}</Button>
  );
};

Veuillez noter qu'il fonctionne pour React 16.8

0 votes

En ce qui concerne les fonctions provenant de props, quel type de fonction peut-on utiliser dans la déclaration d'interface ?

1 votes

@JulianTorregrosa, nous pouvons avoir plusieurs façons de le faire. mariusschulz.com/articles/typing-functions-in-typescript

2voto

C'était un problème majeur pour moi et j'ai perdu beaucoup de temps à trouver la bonne solution. Pour l'instant, vous avez une erreur avec la prop children mais à l'avenir, vous pourriez avoir cette erreur pour beaucoup de fonctions où vous déstructurez les params. Je vous suggère donc de suivre ce GitHub numéro .

const yourfunc = ({destructuredProps}: {destructuredProps: type}) => {}

1voto

Julian Torregrosa Points 161

Vous pouvez également utiliser des types

type ButtonProps = {
    children: ReactNode;

}

const Button = ({ children }: ButtonProps) => (
    <button>{children}</button>
);

0voto

Akshay Vijay Jain Points 2041

Cette erreur peut être corrigée en définissant explicitement le type de la variable ( children dans ce cas) et ne pas le laisser être déduit implicitement

L'erreur peut être stoppée complètement avec TypeScript --noImplicitAny option de compilation

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X