npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

babel-plugin-transform-typescript-enums

v0.1.1

Published

A babel plugin to transform typescript enums differently.

Downloads

41

Readme

babel-plugin-transform-typescript-enums

Tests

TypeScript enums can be very frasturating to deal with. This package gives more control over how babel transpiles TypeScript enums.

Prerequisites

Make sure you are using @babel/core version 7+. Previous versions might work, but are not supported.

Installation

Using npm:

npm i -D babel-plugin-transform-typescript-enums

Or, using yarn:

yarn add -D babel-plugin-transform-typescript-enums

Usage

Via .babelrc (Recommended)

{
  "plugins": ["transform-typescript-enums"]
}

Please note that if you are using @babel/plugin-transform-typescript along with this plugin you will need to put transform-typescript-enums in a higher order, before the TypeScript plugin, E.g:

{
  "plugins": ["transform-typescript-enums", "@babel/plugin-transform-typescript"]
}

If you are using @babel/preset-typescript this is not relevant because in babel, plugins run before presets.

Via CLI

With @babel/preset-typescript:

# Order of presets and plugins doesn't matter.

babel --presets @babel/preset-typescript --plugins transform-typescript-enums script.js

Or with @babel/plugin-transform-typescript:

# Notice that it comes before the @babel/plugin-transform-typescript plugin.

babel --plugins transform-typescript-enums,@babel/plugin-transform-typescript script.js

Configuration

This plugin gives you more control over transpiling your enums. As you may know, TypeScript enums gets converted to JavaScript objects at runtime, and sometimes we might want to change how it's done.

reverseMap (default undefined)

If you are unfamiliar with TypeScript enums reverse mapping, you can read about it in the official TypeScript documentation. In short, enum reverse mapping lets you access enum values using their keys and enum keys using their values, a bi-directional behavior.

The reverseMap configuration option offers more control over how and whether enums should be reverse mapped. By default, TypeScript string enum entries (enum entries with string values) are not being reverse-mapped while numeric enum entires are. This option will let you decide yourself.

reverseMap: undefined (or just don't specify)

Just like TypeScript's default behavior, will transform string enum entries into a non-reverse mapped enum object and numeric enums into a reverse mapped enum object.

Consider the following TypeScript inputs:

enum ColorString {
  Red = 'red',
  Yellow = 'yellow'
}

enum ColorNumeric {
  Red = 1,
  Yellow = 2
}

The above code snippet will be transformed into the following JavaScript output:

var ColorString;

(function (ColorString) {
  ColorString["Red"] = "red";
  ColorString["Yellow"] = "yellow";
})(ColorString || (ColorString = {}));

var ColorNumeric;

(function (ColorNumeric) {
  ColorNumeric[ColorNumeric["Red"] = 1] = "Red";
  ColorNumeric[ColorNumeric["Yellow"] = 2] = "Yellow";
})(ColorNumeric || (ColorNumeric = {}));

Or, to simplify:

const ColorString = {
  Red: 'red',
  Yellow: 'yellow'
}

const ColorNumeric = {
  1: 'Yellow',
  2: 'Red',
  Red: 2,
  Yellow: 1
}

reverseMap: true

Will forcefully enable reverse mapping for all enum value types.

IMPORTANT NOTEThis is not supported by TypeScript, use it only if you know what you are doing. It might cause some values to override each other (for example, when using objects as enum values).

Consider the following TypeScript inputs:

enum ColorString {
  Red = 'red',
  Yellow = 'yellow'
}

enum ColorNumeric {
  Red = 1,
  Yellow = 2
}

The above code snippet will be transformed into the following JavaScript output:

var ColorString;

(function (ColorString) {
  ColorString[ColorString["Red"] = "red"] = "Red";
  ColorString[ColorString["Yellow"] = "yellow"] = "Yellow";
})(ColorString || (ColorString = {}));

var ColorNumeric;

(function (ColorNumeric) {
  ColorNumeric[ColorNumeric["Red"] = 1] = "Red";
  ColorNumeric[ColorNumeric["Yellow"] = 2] = "Yellow";
})(ColorNumeric || (ColorNumeric = {}));

Or, to simplify:

const ColorString = {
  Red: 'red',
  Yellow: 'yellow',
  red: 'Red',
  yellow: 'Yellow'
}

const ColorNumeric = {
  1: 'Red',
  2: 'Yellow',
  Red: 1,
  Yellow: 2
}

reverseMap: false

Will disable reverse mapping completely, for all entry types.

Consider the following TypeScript inputs:

enum ColorString {
  Red = 'red',
  Yellow = 'yellow'
}

enum ColorNumeric {
  Red = 1,
  Yellow = 2
}

The above code snippet will be transformed into the following JavaScript output:

var ColorString;

(function (ColorString) {
  ColorString["Red"] = "red";
  ColorString["Yellow"] = "yellow";
})(ColorString || (ColorString = {}));

var ColorNumeric;

(function (ColorNumeric) {
  ColorNumeric["Red"] = 1;
  ColorNumeric["Yellow"] = 2;
})(ColorNumeric || (ColorNumeric = {}));

Or, to simplify:

const ColorString = {
  Red: 'red',
  Yellow: 'yellow'
}

const ColorNumeric = {
  Red: 1,
  Yellow: 2
}