@bordeux/ts-transformer-interface
TypeScript icon, indicating that this package has built-in type declarations

2.0.0 • Public • Published

ts-transformer-interface

A TypeScript custom transformer generating runtime interface info. This is mainly for the runtime JSON schema validation. So only a subset of TypeScript types are handled. They're

  1. primitive types (string, number, boolean, etc)
  2. special types (null, any, unknown)
  3. type reference (other interface/class)
  4. array type
  5. parameterized type (Box<Box<User[]>>)

Example

Input

import { schema } from 'ts-transformer-interface';

interface Location {
  lat: number;
  lng: number;
}

interface User {
  name: string; // required primitive
  title?: string; // optional primitive
  houses: string[]; // required array
  location: Location; // type reference
  spouse?: User; // optional type reference
  children: User[]; // type reference array
  previousLocations?: Location[]; // optional type reference array
  referrer: User | string; // union type
  box: Box<Box<User[]>>; // parameterized type
  marker: google.maps.Marker; // scoped type
}

const userSchema = schema<User>();

Output

'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var index_1 = require('../index');
var userSchema = {
  name: 'User',
  props: [
    { name: 'name', optional: false, type: 'string' },
    { name: 'title', optional: true, type: 'string' },
    { name: 'houses', optional: false, type: { arrayElementType: 'string' } },
    { name: 'location', optional: false, type: { referenceName: 'Location' } },
    { name: 'spouse', optional: true, type: { referenceName: 'User' } },
    { name: 'children', optional: false, type: { arrayElementType: { referenceName: 'User' } } },
    {
      name: 'previousLocations',
      optional: true,
      type: { arrayElementType: { referenceName: 'Location' } },
    },
    { name: 'referrer', optional: false, type: { union: [{ referenceName: 'User' }, 'string'] } },
    {
      name: 'box',
      optional: false,
      type: {
        selfType: 'Box',
        typeArgumentType: {
          selfType: 'Box',
          typeArgumentType: { arrayElementType: { referenceName: 'User' } },
        },
      },
    },
    { name: 'marker', optional: false, type: { referenceName: 'google.maps.Marker' }
  ],
};

Installation

ttypescript

I personally use ts-patch to install all the transformers.

// tsconfig.json
{
  "compilerOptions": {
    // ...
    "plugins": [{ "transform": "ts-transformer-interface/transformer" }]
  }
  // ...
}

Readme

Keywords

Package Sidebar

Install

npm i @bordeux/ts-transformer-interface

Weekly Downloads

14

Version

2.0.0

License

MIT

Unpacked Size

10.8 kB

Total Files

8

Last publish

Collaborators

  • bordeux