Loading...

How to define an enum in Typescript and use it in a Next.js app?

question nextjs react
Ram Patra Published on July 9, 2024
Tested on Next.js 14

Creating an enum in TypeScript within a Next.js project is straightforward. Enums in TypeScript allow you to define a set of named constants that can be used to represent a collection of related values. Here’s how you can create and use an enum in a Next.js application:

Step-by-Step Guide

  1. Setup TypeScript in Next.js: If you haven’t already set up TypeScript in your Next.js project, create a tsconfig.json file at the root of your project and run the following command:
    npx next dev
    

    This will automatically set up the basic TypeScript configuration for you.

  2. Define Your Enum: Create a new TypeScript file or add the enum to an existing file where you need it. For example, you can create an enums.ts file inside a types directory.

    // types/enums.ts
    export enum UserRole {
      Admin = 'ADMIN',
      User = 'USER',
      Guest = 'GUEST'
    }
    
  3. Using the Enum in a Component: Import and use the enum in your Next.js components or other TypeScript files.

    // app/page.tsx
    import { UserRole } from '../types/enums';
    
    const HomePage = () => {
      const role: UserRole = UserRole.Admin;
    
      return (
        <div>
          <h1>Welcome, {role}</h1>
        </div>
      );
    };
    
    export default HomePage;
    

Example Project Structure

my-nextjs-app/
├── app/
│   ├── page.tsx
├── types/
│   ├── enums.ts
├── tsconfig.json
└── package.json

Using Enums with Functions

You can also use enums in functions for better type safety and readability.

// types/enums.ts
export enum UserRole {
  Admin = 'ADMIN',
  User = 'USER',
  Guest = 'GUEST'
}

// utils/checkRole.ts
import { UserRole } from '../types/enums';

export const checkUserRole = (role: UserRole): string => {
  switch (role) {
    case UserRole.Admin:
      return 'You have admin privileges.';
    case UserRole.User:
      return 'You are a regular user.';
    case UserRole.Guest:
      return 'You are a guest.';
    default:
      return 'Unknown role.';
  }
};

// pages/index.tsx
import { UserRole } from '../types/enums';
import { checkUserRole } from '../utils/checkRole';

const HomePage = () => {
  const role: UserRole = UserRole.User;

  return (
    <div>
      <h1>Role Check: {checkUserRole(role)}</h1>
    </div>
  );
};

export default HomePage;

Including Enums in TypeScript Configuration

Ensure that your TypeScript configuration (tsconfig.json) includes all necessary files for compilation.

// tsconfig.json
{
  "compilerOptions": {
    "target": "esnext",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noEmit": true,
    "esModuleInterop": true,
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "jsx": "preserve",
    "incremental": true,
    "baseUrl": ".",
    "paths": {
      "@/*": ["./*"]
    }
  },
  "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
  "exclude": ["node_modules"]
}

Summary

Creating and using enums in a Next.js TypeScript project involves defining the enum, exporting it, and then importing and using it where needed. This improves code readability, maintainability, and type safety.

Presentify

Take your presentation to the next level.

FaceScreen

Put your face and name on your screen.

ToDoBar

Your to-dos on your menu bar.

Ram Patra Published on July 9, 2024
Image placeholder

Keep reading

If this article was helpful, others might be too

question nextjs front-end November 12, 2024 How to define schemas, foreign keys, relations, and query data by performing joins in a Nextjs app using Supabase and Drizzle?

Drizzle is an ORM that makes it easy to work with db, data migrations, etc. Here’s how you can define foreign keys, relations, and perform table joins using Drizzle ORM in a Next.js app with Supabase:

question nextjs react July 19, 2024 How to get the current path in Next.js?

To get the current path in a Next.js application, you can use the usePathname hook from next/navigation module. This hook allows you to access the current pathname within your components. Here’s how you can use it:

question nextjs react July 11, 2024 How to set environment variable in a Nextjs App and when to use NEXT_PUBLIC prefix?

Setting environment variables in a Next.js app is straightforward. Next.js supports loading environment variables from .env files. Here’s a step-by-step guide on how to set and use environment variables in your Next.js application: