Chapitre 2 · Leçon 1
Typer les composants, hooks et le contexte
Section 1
Step 1
Définis les props d'un composant avec une interface. React.FC<Props> ou simplement (props: Props) => JSX.Element — les deux fonctionnent, la seconde est recommandée.
TutorialCard.tsx
1import type { FC, ReactNode } from "react";
2
3interface TutorialCardProps {
4 id: string;
5 title: string;
6 level: "Beginner" | "Intermediate" | "Advanced";
7 duration: number;
8 color: string;
9 onSelect?: (id: string) => void; // prop optionnelle
10 children?: ReactNode; // contenu JSX optionnel
11}
12
13// Syntaxe recommandée — pas de React.FC
14function TutorialCard({
15 id,
16 title,
17 level,
18 duration,
19 color,
20 onSelect,
21 children,
22}: TutorialCardProps) {
23 return (
24 <div
25 className="tutorial-card"
26 style={{ borderColor: color }}
27 onClick={() => onSelect?.(id)}
28 >
29 <h3>{title}</h3>
30 <span className={`badge level-${level.toLowerCase()}`}>{level}</span>
31 <span>{duration} min</span>
32 {children}
33 </div>
34 );
35}
36
37export default TutorialCard;Step 2
TypeScript peut inférer le type de useState depuis la valeur initiale. Mais pour null ou des unions, il faut annoter explicitement.
Section 2
Step 3
Les custom hooks en TypeScript peuvent être génériques pour être réutilisables tout en restant typés.