Arbeiten mit YAML in TypeScript: Parsen, Serialisieren und praktische Beispiele
YAML (YAML Ain't Markup Language) ist ein beliebtes Daten-Serialisierungsformat, das häufig für Konfigurationsdateien, API-Beschreibungen und die Speicherung strukturierter Daten verwendet wird. Im TypeScript-Ökosystem gibt es mehrere zuverlässige Werkzeuge für die Arbeit mit YAML. In diesem Artikel betrachten wir die Bibliothek js-yaml im Detail, die der De-facto-Standard für das Parsen und Serialisieren von YAML in TypeScript-Projekten ist.
Installation und Einrichtung
Um zu beginnen, müssen Sie die Bibliothek js-yaml und ihre TypeScript-Typdefinitionen installieren:
npm install js-yamlnpm install --save-dev @types/js-yamlNach der Installation können Sie die Bibliothek in Ihr Projekt importieren:
import * as yaml from 'js-yaml';import * as fs from 'fs';Hauptfunktionen der Bibliothek js-yaml
- YAML in TypeScript-Objekte parsen — Konvertierung eines YAML-Strings in typisierte Datenstrukturen
- Objekte in YAML serialisieren — Rückkonvertierung von TypeScript-Objekten in das YAML-Format
- Unterstützung benutzerdefinierter Typen — Möglichkeit, eigene YAML-Tags zu definieren
- Schema-Validierung — Überprüfung der Korrektheit der Struktur eines YAML-Dokuments
- Dateiarbeit — Lesen und Schreiben von YAML-Dateien über Node.js
YAML in TypeScript parsen
Die Bibliothek js-yaml bietet zwei Hauptmethoden zum Parsen: yaml.load() und yaml.safeLoad(). Es wird empfohlen, safeLoad() zu verwenden, um die Ausführung potenziell gefährlichen Codes zu verhindern:
import * as yaml from 'js-yaml';
const yamlString = `name: PythonLibversion: 1.0.0features: - parsing - serialization - validationmetadata: author: Developer created: 2024-01-15`;
interface Config { name: string; version: string; features: string[]; metadata: { author: string; created: string; };}
const config: Config = yaml.load(yamlString) as Config;console.log(config.name); // PythonLibconsole.log(config.features); // ['parsing', 'serialization', 'validation']Objekte in YAML serialisieren
Zur Konvertierung eines TypeScript-Objekts zurück in YAML wird die Methode yaml.dump() verwendet:
import * as yaml from 'js-yaml';
interface ServerConfig { host: string; port: number; ssl: boolean; paths: { static: string; uploads: string; };}
const serverConfig: ServerConfig = { host: 'localhost', port: 3000, ssl: false, paths: { static: './public', uploads: './uploads' }};
const yamlOutput = yaml.dump(serverConfig, { indent: 2, lineWidth: 80, noRefs: true});
console.log(yamlOutput);/*host: localhostport: 3000ssl: falsepaths: static: ./public uploads: ./uploads*/Arbeiten mit YAML-Dateien in Node.js
Häufig muss eine Konfiguration aus einer externen YAML-Datei geladen werden. So geht das mit dem Modul fs:
import * as yaml from 'js-yaml';import * as fs from 'fs';import * as path from 'path';
interface DatabaseConfig { host: string; port: number; database: string; username: string; password: string;}
function loadYamlConfig<T>(filePath: string): T { try { const fileContent = fs.readFileSync(path.resolve(filePath), 'utf8'); return yaml.load(fileContent) as T; } catch (error) { console.error(`Fehler beim Laden der YAML-Datei: ${filePath}`, error); throw error; }}
// Verwendungconst dbConfig = loadYamlConfig<DatabaseConfig>('./config/database.yaml');console.log(`Verbindung zu ${dbConfig.host}:${dbConfig.port}/${dbConf