A scalable, type-safe, and ergonomic TypeScript enum replacement library.
This project provides a set of composable, zero-runtime-surprise enum utilities for TypeScript. It is designed for minimal bundle size, strong type inference, and extensibility as new enum types are added.
Install with your favorite package manager:
bun
bun add better-ts-enumnpm
npm install better-ts-enumpnpm
pnpm add better-ts-enumyarn
yarn add better-ts-enumThis package provides multiple enum implementations, each optimized for different use cases:
A feature-rich enum with auto-increment, computed members, prefix/suffix generation, and nominal typing. Choose this when you need configurability and advanced features.
Quick example:
import { BasicEnum, BasicEnumBuilder } from "better-ts-enum/basic-enum";
const Status = BasicEnum.new({ ACTIVE: "active", INACTIVE: "inactive" });
// or
const Priority = BasicEnumBuilder.new({ valueType: "key" })
.$("LOW")
.$("MEDIUM")
.$("HIGH")
.build();See BasicEnum documentation for full API, config options, and examples.
A lightweight alternative with a minimal API surface. Choose this when you want simplicity and a smaller bundle footprint.
Quick example:
import { MinimalEnum, MinimalEnumBuilder } from "better-ts-enum/minimal-enum";
const Status = MinimalEnum.new({ ACTIVE: "active", INACTIVE: "inactive" });
// or
const Priority = MinimalEnumBuilder.new()
.$("LOW")
.$("MEDIUM")
.$("HIGH")
.build();See MinimalEnum documentation for full API and examples.
All enum types include:
- Strong type inference – Keys and values are precisely typed
- Immutability – Enums are frozen by default (opt-out available)
- Nominal typing – Optional distinct types per enum for type safety
- JSON serialization – Enums stringify as plain objects
- Auto-increment – Like native enums, when desired
Please see CONTRIBUTING.md for contribution guidelines.
MIT