Working with Enums

1. Defining Enum Types

Example: Enum declaration

enum Role {
  ADMIN
  EDITOR
  VIEWER
}
RuleDetail
ValuesSCREAMING_SNAKE_CASE, no quotes
Cannot startWith true, false, null
StableRenaming is a breaking change

2. Using Enum Values

PositionForm
Argument literalusers(role: ADMIN) (no quotes)
Variable$role: Role! sent as JSON string
Field typerole: Role!

3. Providing Enum Descriptions

Example: Per-value descriptions

"""User permission tier."""
enum Role {
  "Full access"
  ADMIN
  "Write content"
  EDITOR
  "Read-only"
  VIEWER
}

4. Mapping Enum Values

Example: Internal value mapping

const resolvers = {
  Role: { ADMIN: "admin", EDITOR: "edit", VIEWER: "ro" }
};
PatternUse
SDL ↔ DBMap GraphQL values to DB strings/ints
SDL ↔ TS enumCodegen produces matching TS enum

5. Deprecating Enum Values

Example: @deprecated value

enum Role {
  ADMIN
  EDITOR
  VIEWER
  GUEST @deprecated(reason: "Use VIEWER instead")
}
RuleDetail
Still queryableExisting clients keep working
Hidden in toolsGraphiQL etc. hide deprecated by default

6. Using Enums in Arguments

Example: Filter by enum

type Query {
  orders(status: OrderStatus = PENDING): [Order!]!
}

7. Using Enums in Filters

FormExample
Equalitystatus: PENDING
Setstatus_in: [PENDING, PAID]
Negationstatus_not: CANCELLED

8. Creating Status Enums

Example: Order status

enum OrderStatus {
  PENDING
  PAID
  SHIPPED
  DELIVERED
  CANCELLED
  REFUNDED
}

9. Creating Role Enums

Example: Role-based access

enum Role { OWNER ADMIN MEMBER GUEST }
enum Permission { READ WRITE DELETE ADMIN }

type User {
  role: Role!
  permissions: [Permission!]!
}

10. Validating Enum Values

LayerBehavior
Validation phaseInvalid literal → query rejected before execution
VariablesCoerced from string; unknown value → error
ResolversReceive mapped internal value