1.0.0 • Published 4 months ago

@zerochae/ts-enum v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

šŸš€ ts-enum - Java-style Enums in TypeScript

A TypeScript Enum library inspired by Java's Enum.
Provides auto-registration, type safety, and a more structured approach to Enums in TypeScript.


šŸ“Œ Features

āœ… Java-like Enum with static values() and valueOf() methods
āœ… Auto-register Enums without manual configuration
āœ… Type-safe and strict Enum handling
āœ… Removes unwanted Function properties (apply, caller, bind)


šŸ“¦ Installation

You can install ts-enum via npm or yarn:

npm install @zc/tts-enum
# or
yarn add @zc/ts-enum

šŸ› ļø Usage

1ļøāƒ£ Basic Enum Example

// UserStatus.ts
import { Enum, createEnum } from "ts-enum";

export default createEnum(
  class UserStatus extends Enum {
    static readonly ACTIVE = new UserStatus("ACTIVE");
    static readonly INACTIVE = new UserStatus("INACTIVE");

    protected constructor(value: string) {
      super(value);
    }

    isActive() {
      return this === UserStatus.ACTIVE;
    }
  },
);

// another file
import UserStatus from "/my/enum/path/UserStatus"

console.log(UserStatus.values()); 
// āœ… [UserStatus.ACTIVE, UserStatus.INACTIVE]

console.log(UserStatus.valueOf("ACTIVE") === UserStatus.ACTIVE); 
// āœ… true

console.log(UserStatus.ACTIVE.isActive()); 
// āœ… true

2ļøāƒ£ Enum with Additional Methods

// OrderStatus.ts
import { Enum, createEnum } from "ts-enum";

export default createEnum(
  class OrderStatus extends Enum {
    static readonly PENDING = new OrderStatus("PENDING");
    static readonly COMPLETED = new OrderStatus("COMPLETED");
    static readonly CANCELED = new OrderStatus("CANCELED");

    protected constructor(value: string) {
      super(value);
    }

    isFinalized() {
      return this === OrderStatus.COMPLETED || this === OrderStatus.CANCELED;
    }
  },
);

// use another file
import OrderStatus from "/my/enum/path/OrderStatus"

console.log(OrderStatus.PENDING.isFinalized()); 
// āœ… false

console.log(OrderStatus.COMPLETED.isFinalized()); 
// āœ… true

šŸŽÆ API Reference

Enum Base Class

All custom Enums should extend the Enum base class.

MethodDescription
Enum.values()Returns an array of all Enum instances
Enum.valueOf(value: string)Returns the Enum instance corresponding to the given value
Enum.toString()Returns the string representation of the Enum value
Enum.equals(other: Enum | string)Checks if two Enum values are equal
Enum.strictEquals(other: Enum)Strictly compares two Enum instances

šŸ’” Why Use ts-enum?

FeatureTypeScript Native enumts-enum
Type Safetyāš ļø Weak (allows any value)āœ… Strong
String-Based EnumsāŒ Noāœ… Yes
Methods in EnumsāŒ Noāœ… Yes
Auto-RegistrationāŒ Noāœ… Yes
values() / valueOf()āŒ Noāœ… Yes

šŸ“Œ References

This library was inspired by class-enum.