Blame view

Yi.Vben5.Vue3/packages/utils/src/helpers/enum-options.ts 965 Bytes
515fceeb   “wangming”   框架初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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;
  }