Enum Constant Usage Guide for Akan.js

This guide provides comprehensive instructions for using `enumOf` to create type-safe enumerations in constant files within Akan.js applications.
Overview of enumOf
`enumOf` provides runtime-enforced enumerations with full TypeScript type safety. Key features include type safety, immutable values, utility methods, and seamless MongoDB integration.
import { enumOf } from "@akanjs/base";
export const MyEnum = enumOf(["value1", "value2"] as const);
export type MyEnum = enumOf<typeof MyEnum>;
Declaring Enumerations
Use this pattern to declare enums with required `as const` assertion and double export pattern.
export const Status = enumOf(["active", "pending", "archived"] as const);
export type Status = enumOf<typeof Status>;

Key Requirements:

  • `as const` assertion is essential for literal type inference
  • Values must be declared as a constant array
  • Double export pattern for constant and type
Using Enums in Models

Field Decorators

@Field.Prop(() => String, {
  enum: Status,
  default: "active"
})
status: Status;

Arrays

@Field.Prop(() => [String], {
  enum: UserRole
})
roles: UserRole[];

Filter Arguments

@Filter.Mongo()
filterByStatus(
  @Filter.Arg("status", () => String, {
    enum: Status
  })
  status: Status
) {
  return { status };
}
Enum Operations and Methods

Value Checking

Status.has("active"); // true
Status.has("invalid"); // false

Index Lookup

Status.indexOf("archived"); // Returns 2

Iteration Methods

// Find
Status.find((val) => val.includes("a"));
// Filter
Status.filter((val) => val.startsWith("a"));
// Map
Status.map((val) => val.toUpperCase());
Best Practices

Do's

  • Use simple string literals for enum values
  • Group related enums near their usage context
  • Always specify default values in decorators
  • Use PascalCase for enum names

Don'ts

  • Don't omit `as const` assertion
  • Avoid non-constant arrays
  • Never modify enum values after creation
  • Avoid complex objects unless necessary
Real-World Examples
export const TicketStatus = enumOf([
  "active",
  "rejected",
  "opened",
  "inProgress",
  "done",
  "reviewing",
  "feedback",
  "completed",
  "archived",
] as const);

Enum Usage in Class Methods

static getActiveTickets(tickets: LightTicket[]) {
  return tickets.filter(t => 
    ["active", "inProgress"].includes(t.status)
  );
}

Key Takeaways

  • Enums ensure type safety across frontend/backend
  • Works seamlessly with Akan.js decorator system
  • Provides runtime validation in addition to compile-time checks
Released under the MIT License
Official Akan.js Consulting onAkansoft
Copyright © 2025 Akan.js. All rights reserved.
System managed bybassman