Réagir 18 enfants TypeScript FC
J'ai mis à jour vers React 18 et tout s'est bien compilé. Aujourd'hui, il semble que chaque composant qui utilise des enfants génère une erreur.Property 'children' does not exist on type 'IPageProps'.
Avant les enfants, les accessoires étaient automatiquement inclus dans l' FC
interface. Maintenant, il semble que je doive ajouter manuellement children: ReactNode
. Quel est le type de dactylographie correct pour les enfants réactifs ?
Cela fait-il partie de la mise à jour React 18, ou y a-t-il quelque chose qui cloche dans mon env?
package.json
"react": "^18.0.0",
"react-dom": "^18.0.0",
"next": "12.1.4",
"@types/react": "18.0.0",
"@types/react-dom": "18.0.0",
tsconfig.json
{
"compilerOptions": {
"target": "esnext",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "preserve",
"alwaysStrict": true,
"sourceMap": true,
"incremental": true
},
"include": ["src"],
"exclude": ["node_modules"]
}
Solution du problème
Bien que cette réponse soit correcte, je tiens à noter que vous n'êtes absolument pas obligé d' utiliser cet PropsWithChildren
assistant. (Il est principalement utile pour le codemod, pas pour une utilisation manuelle.)
Au lieu de cela, je trouve plus facile de les définir manuellement.
Avant que
import * as React from 'react';
type Props = {};
const Component: React.FC<Props> = ({children}) => {...}
Après
import * as React from 'react';
type Props = {
children?: React.ReactNode
};
const Component: React.FC<Props> = ({children}) => {...}
C'est tout ce qu'il faut.
Dans React, children
c'est un accessoire régulier et ce n'est pas quelque chose de spécial. Vous devez donc le définir comme vous définissez tous les autres accessoires. Les frappes précédentes qui le cachaient étaient fausses.
Commentaires
Enregistrer un commentaire