Skip to content

enumOf

枚举工具, ts 类型友好。内置 value, label, description 三个主要字段,支持字段扩展。

使用

ts
import { enumOf } from 'rattail'

const Status = enumOf({
  Idle: 0,
  Pending: 1,
  Done: 2,
})

Status.Idle // 0
Status.Pending // 1
Status.Done // 2
Status.values() // [0, 1, 2]

主要字段

labeldescription 是枚举内置的两个主要字段,如果要支持 i18n,可以用字符串 getter 的配置形式。

ts
const Status = enumOf({
  Success: { value: 1, label: 'Success', description: 'Success description' },
  Warning: { value: 2, label: () => 'Warning', description: () => 'Warning Description' },
})

Status.label(Status.Success) // 'Success'
Status.label(Status.Warning) // 'Warning'
Status.description(Status.Success) // 'Success description'
Status.description(Status.Warning) // 'Warning Description'
Status.options()
/*
[
  { value: 1, label: 'Success', description: 'Success description' },
  { value: 2, label: 'Warning', description: 'Warning Description' },
]
*/

扩展字段

除内置的 value, label, description 以外也支持配置其他任何字段,如 color, 但需要通过 .option(1).color 获取值。

ts
const Status = enumOf({
  Success: { value: 1, label: 'Success', color: 'green' },
  Warning: { value: 2, label: 'Warning', color: 'orange' },
})

Status.option(Status.Success).color // 'green'

参数

参数类型说明
configobject键为枚举键;值为 string, number, boolean 类型的原始值或对象配置 { value, label?, description?, ... }

方法

方法说明
values()获取所有枚举值。
label(v)获取枚举值的 label。
labels()获取所有枚举值对应的 label
description(v)获取枚举值的 description。
descriptions()获取所有枚举值对应的 description
option(v)获取枚举值的 option
options()获取所有的枚举值对应的 option

类型工具

ts
import { enumOf, type EnumOf } from 'rattail'

const Status = enumOf({ Idle: 0, Done: 1 })

type Status = EnumOf<typeof Status> // 0 | 1