TypeScript custom transformer which enumerates members of the union of string literal types
npm install ts-transformer-enumerate!Build Status
[![NPM version][npm-image]][npm-url]

A TypeScript custom transformer which enables enumerating members of the union of string literal types.
This package exports 2 functions.
One is enumerate which is used in TypeScript codes to enumerate members of the union of string literal types, while the other is a TypeScript custom transformer which is used to compile the enumerate function correctly.
enumerate``ts
import { enumerate } from 'ts-transformer-enumerate';
type Colors = 'green' | 'yellow' | 'red';
const Colors = enumerate
console.log(Colors.green); // 'green'
console.log(Colors.yellow); // 'yellow'
console.log(Colors.red); // 'red'
`
Unfortunately, TypeScript itself does not currently provide any easy way to use custom transformers (See https://github.com/Microsoft/TypeScript/issues/14419 for detail).
It is recommended to use the custom transformer with webpack, Rollup, or ttypescript as described.
You can also use the transformer with TypeScript compiler API as follows.
`js
const ts = require('typescript');
const enumerateTransformer = require('ts-transformer-enumerate/transformer').default;
const program = ts.createProgram([/ your files to compile /], {
strict: true,
noEmitOnError: true,
target: ts.ScriptTarget.ES5
});
const transformers = {
before: [enumerateTransformer(program)],
after: []
};
const { emitSkipped, diagnostics } = program.emit(undefined, undefined, undefined, false, transformers);
if (emitSkipped) {
throw new Error(diagnostics.map(diagnostic => diagnostic.messageText).join('\n'));
}
`
As a result, the TypeScript code shown above is compiled into the following JavaScript.
`js`
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var ts_transformer_enumerate_1 = require("ts-transformer-enumerate");
var Colors = { green: "green", yellow: "yellow", red: "red" };
console.log(Colors.green); // 'green'
console.log(Colors.yellow); // 'yellow'
console.log(Colors.red); // 'red'
* The enumerate function can only be used as a call expression. Writing something like enumerate.toString() results in a runtime error.enumerate
* does not work with a dynamic type parameter, i.e., enumerate in the following code is converted to an empty object({}).
`ts``
class MyClass
enumerate() {
return enumerate
}
}
MIT
[travis-image]:https://travis-ci.org/kimamula/ts-transformer-enumerate.svg?branch=master
[travis-url]:https://travis-ci.org/kimamula/ts-transformer-enumerate
[npm-image]:https://img.shields.io/npm/v/ts-transformer-enumerate.svg?style=flat
[npm-url]:https://npmjs.org/package/ts-transformer-enumerate