tte

ts-transformer-enumerate

A TypeScript custom transformer which enables to enumerate members of the union of string literal types

Showing:

Popularity

Downloads/wk

247

GitHub Stars

70

Maintenance

Last Commit

4mos ago

Contributors

3

Package

Dependencies

0

Size (min+gzip)

0.1KB

License

MIT

Type Definitions

Tree-Shakeable

No?

Categories

Readme

ts-transformer-enumerate

Build Status NPM version Downloads

A TypeScript custom transformer which enables enumerating members of the union of string literal types.

Requirement

TypeScript >= 2.4.1

How to use this package

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.

How to use enumerate

import { enumerate } from 'ts-transformer-enumerate';

type Colors = 'green' | 'yellow' | 'red';
const Colors = enumerate<Colors>();

console.log(Colors.green); // 'green'
console.log(Colors.yellow); // 'yellow'
console.log(Colors.red); // 'red'

How to use the custom transformer

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.

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.

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

Note

  • 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<T>() in the following code is converted to an empty object({}).
class MyClass<T extends string> {
  enumerate() {
    return enumerate<T>();
  }
}

License

MIT

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100