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.

Ram Patra Published on July 9, 2024
Image placeholder

Keep reading

If this article was helpful, others might be too

question nextjs react February 9, 2024 Main advantages of using the Link component in Next.js over Anchors and Buttons

The main advantage of using the Link component in Next.js for client-side navigation is its optimized prefetching behavior, which enhances the performance and user experience of your web application. Here’s a breakdown of the key advantages:

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 front-end July 21, 2024 How to fix Next.js generating Open Graph images with localhost in the url?

This happens when you have not set the metadata properly. Just make sure you have set the metadataBase property like below:export const metadata = { metadataBase: new URL('https://rampatra.com'), // other configs}Learn more from the official docs.