用途
nuxt-enums 提供了一套在 Nuxt 项目中使用的基于类的 TypeScript 枚举模式。它通过 Castable 接口与模型系统集成,让枚举值不仅能表示固定取值,还能携带行为方法(如返回颜色、标签文本),从而在业务逻辑和 UI 展示中复用。
主要能力
- 类枚举定义:通过继承 Enum 基类并实现 Castable 接口,创建具有静态枚举值的类。
- 行为方法:可在枚举类中定义方法(如 color() 返回颜色标识、get text 返回显示文本),将展示逻辑与枚举值绑定。
- 模型自动转换:实现静态 cast 方法后,模型中的枚举字段可从 API 返回的字符串自动转换为枚举实例。
- 比较与遍历:支持使用 .is() 方法比较枚举值,以及通过 .values() 获取所有枚举值。
- 模板集成:在模板中可直接调用枚举实例的方法和属性,例如用于 UI 组件的颜色和文本。
使用方式
- 在
app/enums/目录下创建枚举文件,例如PostStatus.ts。 - 导入 Enum 基类和 Castable 类型:
import Enum from '#layers/base/app/enums/Enum' import type { Castable } from '#layers/base/app/types' - 定义类并继承 Enum,实现 Castable:
export default class PostStatus extends Enum implements Castable { static readonly Draft = PostStatus.create('draft') static readonly PendingReview = PostStatus.create('pending review') static readonly Published = PostStatus.create('published') static readonly Archived = PostStatus.create('archived') static cast(value: string): PostStatus { return PostStatus.coerce(value) } color(): string { switch (this.value) { case 'draft': return 'neutral' case 'pending review': return 'warning' case 'published': return 'success' case 'archived': return 'error' default: return 'neutral' } } get text(): string { return this.value } } - 在模型中使用枚举类型,API 字符串会自动转换:
status: PostStatus - 进行比较或获取所有值:
post.status.is(PostStatus.Published) PostStatus.values() - 在模板中使用:
<UBadge :color="post.status.color()">{{ post.status.text }}</UBadge>
适用场景
- Nuxt 应用中需要管理状态、类型等固定取值集合。
- 希望为枚举值附加展示逻辑(如颜色、标签),避免在组件中散落 switch 语句。
- 需要从后端 API 接收字符串并自动转换为具有行为的枚举实例。
- 使用 UBadge 等 UI 组件时,直接利用枚举方法提供颜色和文本。
限制
- 资料未提供安装命令、依赖要求或版本兼容性信息。
- 资料未说明是否支持除 Nuxt 外的其他框架。
- 资料未提及收费、价格或平台限制。
- 资料未提供完整的 API 文档或所有可用方法列表。