Arbeit mit YAML in TypeScript: Parsen, Generieren und Validieren von Daten

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

Arbeit mit YAML in TypeScript: Parsen, Generieren und Validieren

\n\n

YAML (YAML Ain't Markup Language) ist eines der beliebtesten Daten-Serialisierungsformate, das häufig in Konfigurationsdateien, DevOps (Docker, Kubernetes, Ansible) und CI/CD-Pipelines verwendet wird. Im TypeScript-Ökosystem wird für die Arbeit mit YAML die Bibliothek js-yaml verwendet, die die vollständige Unterstützung der YAML 1.2-Spezifikation bietet, einschließlich komplexer Strukturen, Tags und benutzerdefinierter Datentypen.

\n\n

Installation und Einrichtung

\n\n

Installieren Sie zunächst die Bibliothek und ihre Typen über npm:

\n\n
npm install js-yaml\nnpm install --save-dev @types/js-yaml
\n\n

Nach der Installation können Sie die Bibliothek in Ihr TypeScript-Projekt importieren:

\n\n
import * as yaml from 'js-yaml';\nimport * as fs from 'fs';
\n\n

YAML in TypeScript parsen

\n\n

Die Hauptfunktion zum Lesen von YAML ist yaml.load(), die einen YAML-String in ein JavaScript/TypeScript-Objekt umwandelt. Betrachten wir ein Beispiel mit einer Konfigurationsdatei:

\n\n
// config.yaml\n// server:\n//   port: 3000\n//   host: "localhost"\n// database:\n//   url: "mongodb://localhost:27017/mydb"\n//   poolSize: 10\n// features:\n//   - logging\n//   - authentication\n\ninterface Config {\n  server: {\n    port: number;\n    host: string;\n  };\n  database: {\n    url: string;\n    poolSize: number;\n  };\n  features: string[];\n}\n\nconst yamlContent = fs.readFileSync('config.yaml', 'utf8');\nconst config = yaml.load(yamlContent) as Config;\n\nconsole.log(config.server.port); // 3000\nconsole.log(config.features); // ['logging', 'authentication']
\n\n

Verwenden Sie für sicheres Parsen (ohne Codeausführung) yaml.load() – es ist sicherer als yaml.eval(), das beliebigen JavaScript-Code ausführen kann.

\n\n

YAML aus TypeScript-Objekten generieren

\n\n

Die umgekehrte Operation – die Umwandlung eines TypeScript-Objekts in einen YAML-String – wird mit der Funktion yaml.dump() durchgeführt. Dies ist nützlich, um Konfigurationsdateien dynamisch zu erstellen:

\n\n
interface DeploymentConfig {\n  apiVersion: string;\n  kind: string;\n  metadata: { name: string; labels?: Record<string, string> };\n  spec: { replicas: number; selector: Record<string, string> };\n}\n\nconst deployment: DeploymentConfig = {\n  apiVersion: 'apps/v1',\n  kind: 'Deployment',\n  metadata: {\n    name: 'my-app',\n    labels: { app: 'my-app', tier: 'backend' }\n  },\n  spec: {\n    replicas: 3,\n    selector: { matchLabels: { app: 'my-app' } }\n  }\n};\n\nconst yamlString = yaml.dump(deployment, {\n  indent: 2,\n  lineWidth: 120,\n  noRefs: true,\n  sortKeys: true\n});\n\nconsole.log(yamlString);\n// apiVersion: apps/v1\n// kind: Deployment\n// metadata:\n//   labels:\n//     app: my-app\n//     tier: backend\n//   name: my-app\n// spec:\n//   replicas: 3\n//   selector:\n//     matchLabels:\n//       app: my-app
\n\n

Arbeit mit benutzerdefinierten Typen

\n\n

Die Bibliothek js-yaml unterstützt benutzerdefinierte Schemata und Datentypen. Dies ist besonders nützlich bei der Arbeit mit Daten, regulären Ausdrücken oder speziellen Objekten:

\n\n
import * as yaml from 'js-yaml';\n\n// Erstellen eines benutzerdefinierten Typs für Daten\nconst DateType = new yaml.Type('!date', {\n  kind: 'scalar',\n  resolve: (data: string) => !isNaN(Date.parse(data)),\n  construct: (data: string) => new Date(data),\n  instanceOf: Date,\n  represent: (date: Date) => date.toISOString()\n});\n\n// Erstellen eines Schemas mit Unterstützung für Standard- und benutzerdefinierte Typen\nconst schema = yaml.DEFAULT_SCHEMA.extend([DateType]);\n\nconst yamlWithDates = `\nevent: !date 2024-12-25T10:00:00Z\ntitle: "Weihnachtsseminar"\n`;\n\nconst parsed = yaml.load(yamlWithDates, { schema });\nconsole.log(parsed.event instanceof Date); // true\nconsole.log(parsed.event.toLocaleDateString('de-DE')); // 25.12.2024
\n\n

YAML validieren mit

Empfehlungen