feat: Options转Enum工具函数
This commit is contained in:
parent
733f43bc47
commit
eb782a9080
@ -1,5 +1,9 @@
|
|||||||
# 1.1.2
|
# 1.1.2
|
||||||
|
|
||||||
|
**Features**
|
||||||
|
|
||||||
|
- Options转Enum工具函数
|
||||||
|
|
||||||
**OTHERS**
|
**OTHERS**
|
||||||
|
|
||||||
- 菜单管理 改为虚拟滚动
|
- 菜单管理 改为虚拟滚动
|
||||||
|
19
packages/utils/src/helpers/__tests__/enum-options.test.ts
Normal file
19
packages/utils/src/helpers/__tests__/enum-options.test.ts
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import { describe, expect, it } from 'vitest';
|
||||||
|
|
||||||
|
import { optionsToEnum } from '../enum-options';
|
||||||
|
|
||||||
|
describe('optionsToEnum Test', () => {
|
||||||
|
it('should return an enum object', () => {
|
||||||
|
const genderOptions = [
|
||||||
|
{ label: '男', value: 1, enumName: 'GENDER_MALE' },
|
||||||
|
{ label: '女', value: 2, enumName: 'GENDER_FEMALE' },
|
||||||
|
] as const;
|
||||||
|
|
||||||
|
const enumTest = optionsToEnum(genderOptions);
|
||||||
|
const male = enumTest.GENDER_MALE;
|
||||||
|
const female = enumTest.GENDER_FEMALE;
|
||||||
|
|
||||||
|
expect(male).toBe(1);
|
||||||
|
expect(female).toBe(2);
|
||||||
|
});
|
||||||
|
});
|
47
packages/utils/src/helpers/enum-options.ts
Normal file
47
packages/utils/src/helpers/enum-options.ts
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/**
|
||||||
|
* @author dap
|
||||||
|
* @description 枚举选项
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 定义options类型
|
||||||
|
*/
|
||||||
|
export interface EnumsOption {
|
||||||
|
/**
|
||||||
|
* 枚举名称 建议使用全大写字母_
|
||||||
|
*/
|
||||||
|
enumName: string;
|
||||||
|
/**
|
||||||
|
* option的标签
|
||||||
|
*/
|
||||||
|
label: string;
|
||||||
|
/**
|
||||||
|
* option的值
|
||||||
|
*/
|
||||||
|
value: boolean | number | string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type EnumResult<T extends readonly EnumsOption[]> = {
|
||||||
|
[key in T[number]['enumName']]: Extract<
|
||||||
|
T[number],
|
||||||
|
{ enumName: key }
|
||||||
|
>['value'];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将options转为枚举
|
||||||
|
* 注意自定义的options需要加上as const作为常量处理
|
||||||
|
* 详见: packages\utils\src\helpers\__tests__\enum-options.test.ts
|
||||||
|
* @param options 枚举选项
|
||||||
|
* @returns 转枚举
|
||||||
|
*/
|
||||||
|
export function optionsToEnum<T extends readonly EnumsOption[]>(
|
||||||
|
options: T,
|
||||||
|
): EnumResult<T> {
|
||||||
|
type K = T[number]['enumName'];
|
||||||
|
const result = {} as EnumResult<T>;
|
||||||
|
options.forEach((item) => {
|
||||||
|
result[item.enumName as K] = item.value;
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
@ -1,3 +1,4 @@
|
|||||||
|
export * from './enum-options';
|
||||||
export * from './find-menu-by-path';
|
export * from './find-menu-by-path';
|
||||||
export * from './generate-menus';
|
export * from './generate-menus';
|
||||||
export * from './generate-routes-backend';
|
export * from './generate-routes-backend';
|
||||||
|
Loading…
Reference in New Issue
Block a user