Skip to Content
5. ExtrasGérer les erreurs avec try et catch

Gérer les erreurs avec try et catch

Par Nael Shiab

Dernière mise à jour le

Même du code bien écrit peut rencontrer des erreurs. Un fichier peut être introuvable, un site Web peut être indisponible ou des données peuvent ne pas avoir la structure attendue.

Par défaut, une erreur arrête votre script. Mais parfois, vous savez comment votre code devrait réagir. Les mots-clés try et catch de TypeScript vous permettent de capturer une erreur et de décider quoi faire ensuite.

Vous voulez être prévenu quand de nouvelles leçons sont publiées ? Abonnez-vous à l'infolettre ✉️ et donnez une ⭐ au cours sur GitHub pour me garder motivé ! Cliquez ici pour me contacter.

Configuration

Créez un nouveau dossier vide, ouvrez-le dans VS Code et créez-y un fichier nommé main.ts. Ajoutez cette ligne et enregistrez le fichier.

main.ts
console.log("Hello!");

Ouvrez le terminal de VS Code (Command + J sur Mac ou Control + J sur Windows) et exécutez cette commande.

node --watch main.ts

Vous devriez voir Hello! dans le terminal. Laissez la commande tourner pour que Node relance main.ts chaque fois que vous enregistrez une modification pendant la leçon.

VS Code montrant main.ts et le message Hello! affiché par node --watch main.ts.

Capturer une erreur

Faisons volontairement échouer notre code. Le code ci-dessous essaie de lire article.txt, un fichier qui n’existe pas dans le dossier de notre projet.

Mettez ce code dans main.ts et enregistrez le fichier. Node relancera automatiquement le script et vous verrez le résultat dans votre terminal.

main.ts
import { readFile } from "node:fs/promises"; await readFile("./article.txt", "utf8"); console.log("Fin du script");

Node ne trouve pas article.txt, alors il affiche une erreur ENOENT.

L’erreur arrête le script à la ligne 3, donc le code qui suit ne s’exécute jamais. C’est pourquoi Fin du script ne s’affiche pas dans le terminal.

Parfois, on veut que le reste du script continue de s’exécuter même si une ou plusieurs opérations échouent. Pour cela, il faut capturer l’erreur et décider comment la gérer.

Le terminal de VS Code indique une erreur ENOENT à la ligne 3, sans afficher le message de fin du script.

💡

Vous avez peut-être remarqué l’erreur de type à la ligne 1 dans VS Code. Vous pouvez l’ignorer pour cette leçon. Le module node:fs/promises est inclus dans Node, qui exécutera quand même le code.

Pour capturer les erreurs, on peut utiliser try et catch.

  • try est suivi d’accolades. Node essaie d’abord d’exécuter le code entre ces accolades.
  • catch s’exécute si une erreur survient dans le bloc try. Entre les accolades qui suivent catch (error), vous pouvez examiner l’erreur. Elle peut contenir un code ou un message qui vous aide à décider comment la gérer.

Si tout se passe bien dans try, Node saute le bloc catch. Si une erreur survient dans try, Node exécute catch. Dans les deux cas, Node poursuit l’exécution du script, sauf si une erreur survient dans catch et reste sans traitement.

Mettez ce code dans main.ts et enregistrez le fichier. Cette fois, le terminal affiche Oups ! Quelque chose s’est mal passé !, puis Fin du script.

main.ts
import { readFile } from "node:fs/promises"; try { await readFile("./article.txt", "utf8"); } catch (error) { console.log("Oups ! Quelque chose s’est mal passé !"); } console.log("Fin du script");

La lecture du fichier échoue à la ligne 4. Le bloc catch s’exécute et affiche le message de la ligne 6. Le terminal affiche aussi le message de fin du script, ce qui nous montre que la ligne 9 a été exécutée. Avec ce code, on ne sait toujours pas de quelle erreur il s’agit.

Le terminal de VS Code affiche le message d’erreur, puis le message de fin du script, en anglais.

Le message Oups ! nous indique qu’il y a eu un problème. Souvent, vous voudrez afficher l’erreur elle-même pour mieux comprendre ce qui s’est passé. Ajoutez console.log(error) juste après ce message et enregistrez de nouveau main.ts.

main.ts
import { readFile } from "node:fs/promises"; try { await readFile("./article.txt", "utf8"); } catch (error) { console.log("Oups ! Quelque chose s’est mal passé !"); console.log(error); } console.log("Fin du script");

VS Code montre console.log(error) à la ligne 7. Le terminal affiche l’erreur ENOENT pour article.txt, puis le message de fin du script en anglais.

Utiliser finally

Parfois, une action doit avoir lieu que le bloc try réussisse ou que catch gère une erreur. Pour cela, vous pouvez utiliser finally. Le code entre les accolades qui suivent finally s’exécute dans les deux cas.

Par exemple, si vous ouvrez une connexion à une base de données avant try, vous pouvez la fermer dans finally, que la requête réussisse ou échoue.

Ajoutez les lignes surlignées à main.ts et enregistrez le fichier. Le terminal affichera J’ai essayé ! juste avant Fin du script.

main.ts
import { readFile } from "node:fs/promises"; try { await readFile("./article.txt", "utf8"); } catch (error) { console.log("Oups ! Quelque chose s’est mal passé !"); console.log(error); } finally { console.log("J’ai essayé !"); } console.log("Fin du script");

VS Code montre le bloc finally. Le terminal affiche I tried! après l’erreur ENOENT.

Quand article.txt est absent, Node exécute catch, puis finally. Si vous créez article.txt dans le dossier du projet et enregistrez de nouveau main.ts, Node saute catch et affiche quand même J’ai essayé !.

Conclusion

Bravo ! Vous savez maintenant gérer les erreurs en TypeScript. 💃

La gestion des erreurs rend vos scripts plus robustes. Lorsqu’un problème prévu survient, votre code peut y réagir et poursuivre son exécution.

Cependant, il peut être tentant d’entourer tout votre script d’un try et d’un catch. Cela peut masquer des bogues. Capturez les erreurs que vous savez gérer. Laissez les erreurs inattendues arrêter le script pour repérer et corriger le problème.

Vous avez aimé ? Vous voulez être prévenu quand de nouvelles leçons sont publiées ? Abonnez-vous à l'infolettre ✉️ et donnez une ⭐ au cours sur GitHub pour me garder motivé ! Contactez-moi si vous avez des questions.