Aller au contenu principal

Étape 05

Prérequis

git checkout --force step-05
pnpm i

Description

Maintenant que l'équipe Book se charge de BooklistItem, elle effectue des modifications et change le contrat d'interface du composant. Malheureusement, personne ne s'aperçoit que l'application ne tourne plus 😱.

apps/book/src/BooklistItem.tsx

-export function BooklistItem({item, className = ''}: {item: Bookshelf.Book; className?: string}) {
+export function BooklistItem({book, index}: {book: Bookshelf.Book; index: number}) {
return (

Exercice

Modifier la configuration Typescript pour avoir le bon typage dans apps/booklist/src/Booklist.tsx.

Pour cela, nous allons utiliser le path mapping et les project references.

  1. Ajoutez le path mapping et la project reference.
apps/booklist/tsconfig.json
 {
"extends": "tsconfig/react-library.json",
- "include": ["src/**/*", "src/**/*.json"]
+ "include": ["src/**/*", "src/**/*.json"],
+ "compilerOptions": {
+ "paths": {
+ "book/*": ["../book/src/*"]
+ }
+ },
+ "references": [{"path": "../book"}]
}
  1. Passez en composite tous les packages dans le fichier configs/ts/base.json.
    Il s'agit d'un prérequis pour les project references.
configs/ts/base.json
   "compilerOptions": {
- "composite": false,
+ "composite": true,
"declaration": true,
  1. Ouvrez le fichier apps/booklist/src/Booklist.tsx et redémarrez le serveur Typescript de votre VSCode avec :
    Cmd/Ctrl + Shift + P => Typescript: Restart TS Server.
    Vous devriez maintenant voir apparaitre les soucis sur l'utilisation de BooklistItem.

  2. Corrigez les erreurs dans apps/booklist/src/Booklist.tsx.

apps/booklist/src/Booklist.tsx
       <ul className="flex flex-col">
- {booklist?.map((bookListItem) => (
+ {booklist?.map((bookListItem, index) => (
<li key={bookListItem.slug}>
- <BooklistItem item={bookListItem} className="hover:underline" />
+ <BooklistItem book={bookListItem} index={index} />
</li>
))}
</ul>

Bonus 01

Modifier la configuration Typescript pour avoir le bon typage dans apps/bookshelf/src/App.

Bonus 02

Faire fonctionner le script pnpm tscheck.

Avec les project references, tsc s'attend maintenant à avoir des fichiers de définitions .d.ts sur chacun de nos packages.
Modifiez les scripts tscheck pour emit les fichiers de définitions.

Bonus 03

Essayer le plugin officiel.

Nous avons trouvé la solution en pur TS plus simple et plus adaptée à cet exemple mais vous pouvez essayer le plugin pour vous faire votre propre avis 😉.

Solution

Pour accéder à la solution :

git checkout --force step-05-result

Pour voir les changements :

git diff step-05..step-05-result

ou sur Github.