@yafh/enum-def
Advanced tools
+32
-5
| type Definite<T> = { | ||
| [K in keyof T as K extends `${infer _}` ? K : never]: T[K]; | ||
| }; | ||
| declare const enumOptSymbol: unique symbol; | ||
| declare const enumValueSymbol: unique symbol; | ||
| type EnumOptSymbol = typeof enumOptSymbol; | ||
| type EnumValueSymbol = typeof enumValueSymbol; | ||
| type EnumItemOption = { | ||
@@ -15,4 +19,4 @@ /** | ||
| type EnumOption = Record<string, EnumItemOption>; | ||
| type ValueMeta<S extends string, V> = Partial<Record<`__enum_${S}`, V>>; | ||
| type EnumItemValue<D extends EnumOption, V extends number> = ValueMeta<'opt', D> & ValueMeta<'value', V> & V; | ||
| type ValueMeta<S extends EnumOptSymbol | EnumValueSymbol, V> = Partial<Record<S, V>>; | ||
| type EnumItemValue<D extends EnumOption, V extends number> = ValueMeta<EnumOptSymbol, D> & ValueMeta<EnumValueSymbol, V> & V; | ||
| type EnumItem<T extends string, N extends string, V extends number, D extends EnumOption> = { | ||
@@ -124,4 +128,27 @@ /** | ||
| */ | ||
| type RequestEnumValue<T> = T extends UnknownEnumDefine<infer D> ? Partial<ValueMeta<'opt', D>> & number : never; | ||
| type RequestEnumValue<T> = T extends UnknownEnumDefine<infer D> ? Partial<ValueMeta<EnumOptSymbol, D>> & number : never; | ||
| /** | ||
| * 请求严格枚举值类型,通常用于函数形参的定义 | ||
| * 可以通过的类型有: | ||
| * - 枚举值 `arrow.up.value` | ||
| * - 未知的枚举值 `arrow[n]!` 或 `arrow.foo!.value` | ||
| * - 数字 | ||
| * @example | ||
| * ```ts | ||
| * const arrow = defineEnum({ up: { title: '上', value: 1 }, down: { title: '下', value:2 } }) | ||
| * | ||
| * function handleMove(arrow: RequestEnumValue<typeof arrow>) { | ||
| * //... | ||
| * } | ||
| * | ||
| * handleMove(arrow.up.value) // ok | ||
| * handleMove(1) // error | ||
| * handleMove(arrow[n]!) // error | ||
| * handleMove(arrow.foo!.value) // error | ||
| * handleMove(animals.brid.value) // error | ||
| * handleMove(9999) // error | ||
| * ``` | ||
| */ | ||
| type RequestStrictEnumValue<T> = T extends UnknownEnumDefine<infer D> ? EnumItemValue<D, EnumValues<T>> : never; | ||
| /** | ||
| * 解构枚举类型 | ||
@@ -136,3 +163,3 @@ * @example | ||
| */ | ||
| type UnWrapEnumValue<T> = T extends ValueMeta<'value', infer V> ? V : T extends number ? T : never; | ||
| type UnWrapEnumValue<T> = T extends ValueMeta<EnumValueSymbol, infer V> ? V : T extends number ? T : never; | ||
@@ -148,2 +175,2 @@ /** | ||
| export { type DefiniteEnumDefine, type EnumDefine, type EnumItem, type EnumItemOption, type EnumItemValue, type EnumIterate, type EnumNames, type EnumOption, type EnumTitles, type EnumValues, type EunmItemsDefine, type RequestEnumItem, type RequestEnumValue, type UnWrapEnumValue, type UnknownEnumDefine, type UnknownEnumType, defineEnum }; | ||
| export { type DefiniteEnumDefine, type EnumDefine, type EnumItem, type EnumItemOption, type EnumItemValue, type EnumIterate, type EnumNames, type EnumOption, type EnumTitles, type EnumValues, type EunmItemsDefine, type RequestEnumItem, type RequestEnumValue, type RequestStrictEnumValue, type UnWrapEnumValue, type UnknownEnumDefine, type UnknownEnumType, defineEnum }; |
+32
-5
| type Definite<T> = { | ||
| [K in keyof T as K extends `${infer _}` ? K : never]: T[K]; | ||
| }; | ||
| declare const enumOptSymbol: unique symbol; | ||
| declare const enumValueSymbol: unique symbol; | ||
| type EnumOptSymbol = typeof enumOptSymbol; | ||
| type EnumValueSymbol = typeof enumValueSymbol; | ||
| type EnumItemOption = { | ||
@@ -15,4 +19,4 @@ /** | ||
| type EnumOption = Record<string, EnumItemOption>; | ||
| type ValueMeta<S extends string, V> = Partial<Record<`__enum_${S}`, V>>; | ||
| type EnumItemValue<D extends EnumOption, V extends number> = ValueMeta<'opt', D> & ValueMeta<'value', V> & V; | ||
| type ValueMeta<S extends EnumOptSymbol | EnumValueSymbol, V> = Partial<Record<S, V>>; | ||
| type EnumItemValue<D extends EnumOption, V extends number> = ValueMeta<EnumOptSymbol, D> & ValueMeta<EnumValueSymbol, V> & V; | ||
| type EnumItem<T extends string, N extends string, V extends number, D extends EnumOption> = { | ||
@@ -124,4 +128,27 @@ /** | ||
| */ | ||
| type RequestEnumValue<T> = T extends UnknownEnumDefine<infer D> ? Partial<ValueMeta<'opt', D>> & number : never; | ||
| type RequestEnumValue<T> = T extends UnknownEnumDefine<infer D> ? Partial<ValueMeta<EnumOptSymbol, D>> & number : never; | ||
| /** | ||
| * 请求严格枚举值类型,通常用于函数形参的定义 | ||
| * 可以通过的类型有: | ||
| * - 枚举值 `arrow.up.value` | ||
| * - 未知的枚举值 `arrow[n]!` 或 `arrow.foo!.value` | ||
| * - 数字 | ||
| * @example | ||
| * ```ts | ||
| * const arrow = defineEnum({ up: { title: '上', value: 1 }, down: { title: '下', value:2 } }) | ||
| * | ||
| * function handleMove(arrow: RequestEnumValue<typeof arrow>) { | ||
| * //... | ||
| * } | ||
| * | ||
| * handleMove(arrow.up.value) // ok | ||
| * handleMove(1) // error | ||
| * handleMove(arrow[n]!) // error | ||
| * handleMove(arrow.foo!.value) // error | ||
| * handleMove(animals.brid.value) // error | ||
| * handleMove(9999) // error | ||
| * ``` | ||
| */ | ||
| type RequestStrictEnumValue<T> = T extends UnknownEnumDefine<infer D> ? EnumItemValue<D, EnumValues<T>> : never; | ||
| /** | ||
| * 解构枚举类型 | ||
@@ -136,3 +163,3 @@ * @example | ||
| */ | ||
| type UnWrapEnumValue<T> = T extends ValueMeta<'value', infer V> ? V : T extends number ? T : never; | ||
| type UnWrapEnumValue<T> = T extends ValueMeta<EnumValueSymbol, infer V> ? V : T extends number ? T : never; | ||
@@ -148,2 +175,2 @@ /** | ||
| export { type DefiniteEnumDefine, type EnumDefine, type EnumItem, type EnumItemOption, type EnumItemValue, type EnumIterate, type EnumNames, type EnumOption, type EnumTitles, type EnumValues, type EunmItemsDefine, type RequestEnumItem, type RequestEnumValue, type UnWrapEnumValue, type UnknownEnumDefine, type UnknownEnumType, defineEnum }; | ||
| export { type DefiniteEnumDefine, type EnumDefine, type EnumItem, type EnumItemOption, type EnumItemValue, type EnumIterate, type EnumNames, type EnumOption, type EnumTitles, type EnumValues, type EunmItemsDefine, type RequestEnumItem, type RequestEnumValue, type RequestStrictEnumValue, type UnWrapEnumValue, type UnknownEnumDefine, type UnknownEnumType, defineEnum }; |
+1
-2
| { | ||
| "name": "@yafh/enum-def", | ||
| "version": "0.2.4", | ||
| "module": "index.ts", | ||
| "version": "0.2.5", | ||
| "type": "module", | ||
@@ -6,0 +5,0 @@ "scripts": { |
17422
12.72%290
10.27%