Working with YAML in TypeScript: A Complete Guide to Parsing and Serialization

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

Working with YAML in TypeScript: Parsing, Serialization, and Practical Examples



YAML (YAML Ain't Markup Language) is a popular data serialization format often used for configuration files, API descriptions, and storing structured data. In the TypeScript ecosystem, there are several reliable tools for working with YAML. In this article, we will take a detailed look at the js-yaml library, which is the de facto standard for parsing and serializing YAML in TypeScript projects.



Installation and Setup



To get started, you need to install the js-yaml library and its TypeScript typings:



npm install js-yamlnpm install --save-dev @types/js-yaml


After installation, you can import the library into your project:



import * as yaml from 'js-yaml';import * as fs from 'fs';


Key Features of the js-yaml Library



  • Parsing YAML into TypeScript objects — converting a YAML string into typed data structures
  • Serializing objects into YAML — the reverse conversion of TypeScript objects into YAML format
  • Support for custom types — the ability to define your own YAML tags
  • Schema validation — checking the correctness of the YAML document structure
  • Working with files — reading and writing YAML files via Node.js


Parsing YAML in TypeScript



The js-yaml library provides two main methods for parsing: yaml.load() and yaml.safeLoad(). It is recommended to use safeLoad() to prevent the execution of potentially dangerous code:



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']


Serializing Objects into YAML



To convert a TypeScript object back into YAML, use the yaml.dump() method:



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*/


Working with YAML Files in Node.js



It is often necessary to load configuration from an external YAML file. Here is how to do it using the fs module:



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(`Error loading YAML file: ${filePath}`, error); throw error; }}

// Usageconst dbConfig = loadYamlConfig<DatabaseConfig>('./config/database.yaml');console.log(`Connecting to ${dbConfig.host}:${dbConfig.port}/${dbConf

Recommendations