Travail avec le système de fichiers en TypeScript : guide pratique

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Pourquoi travailler avec le système de fichiers en TypeScript ?

\n\n

Toute application est tôt ou tard confrontée à la nécessité d'interagir avec le système de fichiers : sauvegarder des configurations, traiter des fichiers téléchargés, tenir des journaux ou gérer des projets. TypeScript, en tant que surcouche de JavaScript, offre au développeur des outils puissants pour travailler avec les fichiers et les répertoires via le module fs (File System) de Node.js.

\n\n

Dans cet article, nous allons aborder, à travers des exemples pratiques, les opérations de base avec le système de fichiers en TypeScript : lecture et écriture de fichiers, création et suppression de répertoires, ainsi que le traitement des erreurs. Tous les exemples seront présentés avec un typage strict, ce qui est un avantage clé de TypeScript.

\n\n

Modules principaux pour travailler avec le système de fichiers

\n\n

Avant de passer à la pratique, découvrons les trois modules principaux nécessaires au travail :

\n\n
    \n
  • fs — le module principal pour les opérations sur le système de fichiers (lecture, écriture, suppression)
  • \n
  • fs/promises — la version du module fs avec prise en charge des promesses (recommandée pour le code moderne)
  • \n
  • path — utilitaire pour travailler avec les chemins de fichiers et de répertoires
  • \n
\n\n

Pour importer les modules en TypeScript, utilisez la syntaxe suivante :

\n\n
import * as fs from 'fs';\nimport * as fsPromises from 'fs/promises';\nimport * as path from 'path';
\n\n

Remarque : pour un fonctionnement correct avec TypeScript, assurez-vous que les options "moduleResolution": "node" et "esModuleInterop": true sont définies dans votre fichier tsconfig.json.

\n\n

Lecture de fichiers : approches synchrone et asynchrone

\n\n

Lecture synchrone avec typage

\n\n

Les méthodes synchrones bloquent l'exécution du code jusqu'à la fin de l'opération. Utilisez-les uniquement pour les petits fichiers ou lors du chargement initial de l'application :

\n\n
import * as fs from 'fs';\nimport * as path from 'path';\n\nfunction readConfigSync(): Record<string, unknown> {\n  const configPath = path.join(__dirname, 'config.json');\n  \n  try {\n    const data = fs.readFileSync(configPath, 'utf-8');\n    return JSON.parse(data) as Record<string, unknown>;\n  } catch (error) {\n    if (error instanceof Error) {\n      console.error('Erreur de lecture de la configuration :', error.message);\n    }\n    return {};\n  }\n}\n\nconst config = readConfigSync();\nconsole.log('Configuration chargée :', config);
\n\n

Lecture asynchrone avec async/await (méthode recommandée)

\n\n

Pour le code de production, utilisez toujours les méthodes asynchrones. TypeScript fonctionne parfaitement avec async/await :

\n\n
import { readFile } from 'fs/promises';\nimport * as path from 'path';\n\ninterface UserData {\n  id: number;\n  name: string;\n  email: string;\n}\n\nasync function readUserData(fileName: string): Promise<UserData[]> {\n  const filePath = path.resolve('data', fileName);\n  \n  try {\n    const rawData = await readFile(filePath, { encoding: 'utf-8' });\n    const users: UserData[] = JSON.parse(rawData);\n    return users;\n  } catch (error) {\n    if (error instanceof Error) {\n      throw new Error(`Impossible de lire le fichier ${fileName} : ${error.message}`);\n    }\n    throw error;\n  }\n}\n\n// Utilisation\n(async () => {\n  try {\n    const users = await readUserData('users.json');\n    console.log(`${users.length} utilisateurs chargés`);\n  } catch (error) {\n    console.error(error);\n  }\n})();
\n\n

Écriture et mise à jour de fichiers

\n\n

Création et écrasement de fichiers

\n\n

Pour écrire des données dans un fichier, utilisez la méthode writeFile. Elle créera le fichier s'il n'existe pas, ou écrasera le fichier existant :

\n\n
import { writeFile, mkdir } from 'fs/promises';\nimport * as path from 'path';\n\ninterface LogEntry {\n  timestamp: string;\n  level: 'info' | 'warn' | 'error';\n  message: string;\n}\n\n                

Blogs

Book Recommendations