Skip to content

whilenot-dev/typescript-source-code-generation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TypeScript source code generation

This is the playground for a blog post about source code metaprogramming with TypeScript.

I take the following data as input via JSON:

[
  {
    "name": "A",
    "type": "boolean"
  },
  {
    "name": "B",
    "type": "number"
  },
  {
    "name": "C",
    "type": "string"
  }
]

...and generate the following TypeScript file in three different ways:

interface SomeInterfaceA {
  discriminator: "A";
  type: boolean;
}

interface SomeInterfaceB {
  discriminator: "B";
  type: number;
}

interface SomeInterfaceC {
  discriminator: "C";
  type: string;
}

export type SomeInterface = SomeInterfaceA | SomeInterfaceB | SomeInterfaceC;

The methods to output a TypeScript file include source code generation via:

  1. Template literals
  2. A template engine
  3. A writer library
  4. The TypeScript compiler API

Prerequisites

Make sure you have the following tools installed and available in the $PATH environment variable:

  • node - any recent version (>=14.17) should do, or you can find the exact version in the .tool-versions file for asdf-vm
  • npm - that one usually ships with node

Setup

Install all dependencies with:

$ npm ci

Usage

Either build the project and inspect the output files in ./dist:

$ npm run build

...or execute the generate:*-scripts one-by-one to inspect their output in the console:

# Template literals
$ npm run -s generate:1
# A template engine
$ npm run -s generate:2
# A writer library
$ npm run -s generate:3
# The TypeScript compiler API
$ npm run -s generate:4

Have fun!