Use Zod native enum for Typescript enum

Posted on

I recently reviewed a PR that uses Zod to validate the enum type. The code looks like this in Typescript:

export enum SubscriptionTierEnum {
FREE = 'FREE',
BASIC = 'BASIC',
PRO = 'PRO',
ENTERPRISE = 'ENTERPRISE',
}

const subscriptionValues = Object.values(SubscriptionTierEnum) as [
SubscriptionTierEnum,
...SubscriptionTierEnum[]
];

export const SubscriptionTierSchema = z.enum(subscriptionValues);

This code works, but it can be simplified using Zod's native enum support (doc). Instead of creating an array of enum values using Object.values, you can directly use the enum in the z.nativeEnum function. Here's how you can do it:

export const SubscriptionTierSchema = z.nativeEnum(SubscriptionTierEnum);

This approach is cleaner and more efficient 🥰