Gérer les erreurs avec try et catch
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.
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.
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.tsVous 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.

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.
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.

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.
tryest suivi d’accolades. Node essaie d’abord d’exécuter le code entre ces accolades.catchs’exécute si une erreur survient dans le bloctry. Entre les accolades qui suiventcatch (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.
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 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.
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");
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.
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");
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.