Arbeiten mit dem Dateisystem in TypeScript: Ein praktischer Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum ist die Arbeit mit dem Dateisystem in TypeScript wichtig?

\n\n

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

\n\n

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\n

Grundlegende Module für die Arbeit mit dem Dateisystem

\n\n

Bevor 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 fs mit Promise-Unterstützung (für modernen Code empfohlen)
  • \n
  • path — ein Dienstprogramm für die Arbeit mit Datei- und Verzeichnispfaden
  • \n
\n\n

Verwenden Sie für den Import der Module in TypeScript die folgende Syntax:

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

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

\n\n

Dateien lesen: Synchrone und asynchrone Ansätze

\n\n

Synchrone Lesevorgänge mit Typisierung

\n\n

Synchrone 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\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('Fehler beim Lesen der Konfiguration:', error.message);\n    }\n    return {};\n  }\n}\n\nconst config = readConfigSync();\nconsole.log('Konfiguration geladen:', config);
\n\n

Asynchrones Lesen mit async/await (empfohlener Weg)

\n\n

Verwenden Sie für Produktionscode immer asynchrone Methoden. TypeScript arbeitet hervorragend mit 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(`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\n

Dateien schreiben und aktualisieren

\n\n

Dateien erstellen und überschreiben

\n\n

Verwenden Sie zum Schreiben von Daten in eine Datei die Methode writeFile. Sie erstellt die Datei, falls sie nicht existiert, oder überschreibt eine vorhandene:

\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

Buchempfehlungen