Like native enum, but much better!
A solution for business dictionary management.
Supported Platforms
Introduction • Get Started • API Reference • Global Configuration • User Stories • Plugin System • Localization • Extensibility • Best Practices • Compatibility • FAQ • Full API Reference
Native enums are great for constants, but product code usually needs more at runtime:
- human-readable label,
- metadata such as color, icon, or permission
- dropdowns, checkboxes, and menus,
- table filters,
- render a label in a table,
- render a badge color,
- localization,
- metadata lookups,
- validation and lookup helpers.
enum-plus keeps the direct enum-style experience, then adds those runtime capabilities in one place.
It's a front-end business dictionary solution, that provides a lightweight data source. It's part of the front-end infrastructure.
↑ Click image for HD video ↑
💡 Want to see what enum-plus can do and how it improves productivity? Open the Full Demo
- Compatible with the usage of native enums
- Supports multiple data types such as
numberandstring - Enhanced enum items with display names
- Internationalization support for display names, can be integrated with any i18n library
- Converts values directly into display names, simplifying data display in the UI
- Extensible design, allowing custom metadata fields for enum items
- Plugin system design, extending enum functionality through plugin installations
- Supports type narrowing to enhance type safety TypeScript
- Generates dropdowns from enums, compatible with UI libraries like Ant Design, Element Plus, Material-UI
- Compatible with various environments including Browsers, Node.js, React Native, Taro, and mini-programs
- Supports server-side rendering (SSR)
- Compatible with any front-end development framework, including vanilla projects
- TypeScript‑oriented, providing excellent type inference and code completion capabilities
- Zero dependencies
- Lightweight (min+gzip 2KB+ only)
npm install enum-plusimport { Enum } from 'enum-plus';
const StatusEnum = Enum({
Draft: { value: 1, label: 'Draft', color: 'default' },
Review: { value: 2, label: 'In Review', color: 'processing' },
Published: { value: 3, label: 'Published', color: 'success' },
});
StatusEnum.Review; // 2
StatusEnum.label(2); // 'In Review'
StatusEnum.has(2); // true
StatusEnum.keys; // ['Draft', 'Review', 'Published']
StatusEnum.values; // [1, 2, 3]
StatusEnum.labels; // ['Draft', 'In Review', 'Published']
StatusEnum.items; // [{ key: 'Draft', value: 1, label: 'Draft', color: 'default' }, ...]
StatusEnum.named.Draft; // { key: 'Draft', value: 1, label: 'Draft', color: 'default' }
StatusEnum.item(1); // { key: 'Draft', value: 1, label: 'Draft', color: 'default' }
StatusEnum.meta; // { color: [ 'default', 'processing', 'success' ] }
StatusEnum.findBy('color', 'success'); // { key: 'Published', value: 3, label: 'Published', color: 'success' }
StatusEnum.toList({ valueField: 'id', labelField: 'name' }); // [{ id: 1, name: 'Draft' }, ...]
StatusEnum.toMap({ keySelector: 'key', valueSelector: 'value' }); // { Draft: 1, Review: 2, Published: 3 }import i18nPlugin from '@enum-plus/plugin-i18next';
import { Enum } from 'enum-plus';
Enum.install(i18nPlugin);
const StatusEnum = Enum({
Draft: { value: 1, label: 'locales.enums.statusEnum.draft' },
Review: { value: 2, label: 'locales.enums.statusEnum.review' },
Published: { value: 3, label: 'locales.enums.statusEnum.published' },
});
StatusEnum.labels; // ['Draft', 'In Review', 'Published'] or ['草稿', '审核中', '已发布']
StatusEnum.label(2); // 'In Review' or '审核中'
StatusEnum.named.Review.label; // 'In Review' or '审核中'- @enum-plus/plugin-react
- @enum-plus/plugin-react-i18next
- @enum-plus/plugin-i18next
- @enum-plus/plugin-i18next-vue
- @enum-plus/plugin-vue-i18n
- @enum-plus/plugin-next-international
- @enum-plus/plugin-antd
If this project helps you, please consider giving it a Star ⭐️ on GitHub. This will encourage us to continue developing and maintaining this project.