Einleitung: Warum ist die Arbeit mit dem Dateisystem in TypeScript wichtig?
\n\nJede Anwendung steht früher oder später vor der Notwendigkeit, mit dem Dateisystem zu interagieren: Konfigurationen speichern, hochgeladene Dateien verarbeiten, Logs führen oder Projekte verwalten. TypeScript, als Erweiterung von JavaScript, bietet dem Entwickler leistungsstarke Werkzeuge für die Arbeit mit Dateien und Verzeichnissen über das Modul fs (File System) von Node.js.
In diesem Artikel werden wir anhand praktischer Beispiele die grundlegenden Operationen mit dem Dateisystem in TypeScript durchgehen: Lesen und Schreiben von Dateien, Erstellen und Löschen von Verzeichnissen sowie Fehlerbehandlung. Alle Beispiele werden unter Verwendung der strengen Typisierung präsentiert, was ein entscheidender Vorteil von TypeScript ist.
\n\nGrundlegende Module für die Arbeit mit dem Dateisystem
\n\nBevor wir zur Praxis übergehen, lernen wir die drei wichtigsten Module kennen, die für die Arbeit benötigt werden:
\n\n- \n
- fs — das Hauptmodul für Dateisystemoperationen (Lesen, Schreiben, Löschen) \n
- fs/promises — die Version des Moduls
fsmit Promise-Unterstützung (für modernen Code empfohlen) \n - path — ein Dienstprogramm für die Arbeit mit Datei- und Verzeichnispfaden \n
Verwenden Sie für den Import der Module in TypeScript die folgende Syntax:
\n\nimport * as fs from 'fs';\nimport * as fsPromises from 'fs/promises';\nimport * as path from 'path';\n\nBeachten Sie: Für eine korrekte Arbeit mit TypeScript stellen Sie sicher, dass in Ihrer Datei tsconfig.json die Optionen "moduleResolution": "node" und "esModuleInterop": true gesetzt sind.
Dateien lesen: Synchrone und asynchrone Ansätze
\n\nSynchrone Lesevorgänge mit Typisierung
\n\nSynchrone Methoden blockieren die Codeausführung bis zum Abschluss der Operation. Verwenden Sie sie nur für kleine Dateien oder beim initialen Laden der Anwendung:
\n\nimport * 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('Fehler beim Lesen der Konfiguration:', error.message);\n }\n return {};\n }\n}\n\nconst config = readConfigSync();\nconsole.log('Konfiguration geladen:', config);\n\nAsynchrones Lesen mit async/await (empfohlener Weg)
\n\nVerwenden Sie für Produktionscode immer asynchrone Methoden. TypeScript arbeitet hervorragend mit async/await:
\n\nimport { 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(`Datei ${fileName} konnte nicht gelesen werden: ${error.message}`);\n }\n throw error;\n }\n}\n\n// Verwendung\n(async () => {\n try {\n const users = await readUserData('users.json');\n console.log(`${users.length} Benutzer geladen`);\n } catch (error) {\n console.error(error);\n }\n})();\n\nDateien schreiben und aktualisieren
\n\nDateien erstellen und überschreiben
\n\nVerwenden Sie zum Schreiben von Daten in eine Datei die Methode writeFile. Sie erstellt die Datei, falls sie nicht existiert, oder überschreibt eine vorhandene:
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