1.0.6 • Published 2 years ago

enum-value-label v1.0.6

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

EnumValueLabel

Features

  • 支持Enum、Value互相转换
  • 支持Enum、Value获取Label
  • 支持Value、Label转换成数组
  • 支持TS,全属性自动推导
  • 已通过单测冒烟

为什么使用EnumValueLabel / Why use EnumValueLabel

在日常开发中会大量出现以下情况 1. 首先创建枚举

export enum UserType {
     STUDENT = 1, // 学生
     EXPERT,      // 专家
     LECTURER,    // 主讲
     HEAD_TEACHER // 班主任
 }
  1. 之后再根据枚举创建对应映射
    export const userTypeMap = {
        [UserType.STUDENT]: '学生',
        [UserType.EXPERT]: '专家',
        [UserType.LECTURER]: '主讲',
        [UserType.HEAD_TEACHER]: '班主任'
    }
  2. 在需要的场景内进行格式转换(以下拉菜单需要转换成数组举例)
    ``` typescript
    const userTypeOptions = Object.keys(constLabel.userTypeMap).map((value) => ({
        label: userTypeMap[value],
        value
      }));
    **这样大量重复的动作不仅浪费时间,而且毫无意义,所以本包出现并解决此问题。**

Usage

  1. 安装 install
    npm i enum-value-label -D
  2. 基础使用 EnumValueLabel

    参数:需要定义的集成数组对象,使用时请在定义的结尾使用 as const 以便TS可以推导出类型

    约定:

    1. 传入对象的key为原枚举的key
    2. 传入对象的value是一个有且仅有两项的数组,第一项为原枚举的value,第二项为原映射的value

      import { EnumValueLabel } from 'enum-value-label';
      
      const userTypeEnum = EnumValueLabel({
          STUDENT: [1, '学生'],
          EXPERT: [2, '专家'],
          LECTURER: [3, { zh: '主讲', en: 'lecturer' }],
          HEAD_TEACHER: [4, '班主任']
      } as const); // 使用 as const 用以强调类型
      
      console.log(userTypeEnum['STUDENT'])  // 1 
      console.log(userTypeEnum[2])         // EXPERT
      console.log(userTypeEnum.LECTURER)  // 3
    支持TS推导
    
    ![支持TS推导](https://cdn.jsdelivr.net/gh/MingLoves-Life/static@master/enumvaluelabel.png)
  3. 内置方法 _label / _l

    参数:传入对象的 keyvalue的第一项

    _label_l 二者效果相同, 仅是缩写关系

    import { EnumValueLabel } from 'enum-value-label';
    
    const userTypeEnum = EnumValueLabel({
        STUDENT: [1, '学生'],
        EXPERT: [2, '专家'],
        LECTURER: [3, { zh: '主讲', en: 'lecturer' }],
        HEAD_TEACHER: [4, '班主任']
    } as const); // 使用 as const 用以强调类型
    
    console.log(userTypeEnum._label(1))  // '学生'
    console.log(userTypeEnum._label("LECTURER"))  // { zh: '主讲', en: 'lecturer' }
    
    console.log(userTypeEnum._l(1))  // '学生'
    console.log(userTypeEnum._l("LECTURER"))  // { zh: '主讲', en: 'lecturer' }

    支持TS推导

    支持TS推导

    支持TS推导

  4. 内置方法 _array / _a

    参数:期望生成的对象数组中对象的key,传入顺序分别对应原对象value的第一项第二项

    _array_a 二者效果相同, 仅是缩写关系

    import { EnumValueLabel } from 'enum-value-label';
    
    const userTypeEnum = EnumValueLabel({
        STUDENT: [1, '学生'],
        EXPERT: [2, '专家'],
        LECTURER: [3, { zh: '主讲', en: 'lecturer' }],
        HEAD_TEACHER: [4, '班主任']
    } as const); // 使用 as const 用以强调类型
    
    console.log(userTypeEnum._array())  
    // [
    //   { value: 1, label: '学生' },
    //   { value: 2, label: '专家' },
    //   { value: 3, label: { zh: '主讲', en: 'lecturer' } },
    //   { value: 4, label: '班主任' }
    // ]
    
    console.log(userTypeEnum._array('id', 'name'))
    // [
    //   { id: 1, name: '学生' },
    //   { id: 2, name: '专家' },
    //   { id: 3, name: { zh: '主讲', en: 'lecturer' } },
    //   { id: 4, name: '班主任' }
    // ]
    
    // _array 和 _a 二者效果相同, 不再演示

    支持TS推导

    支持TS推导

    支持TS推导

  5. 内置方法 _format / _f

    参数:一个方法用于处理每一项的value 即方法的两个参数分别为原对象value的第一项第二项 详看下面事例

    _format_f 二者效果相同, 仅是缩写关系

    import { EnumValueLabel } from 'enum-value-label';
    
    const userTypeEnum = EnumValueLabel({
        STUDENT: [1, '学生'],
        EXPERT: [2, '专家'],
        LECTURER: [3, { zh: '主讲', en: 'lecturer' }],
        HEAD_TEACHER: [4, '班主任']
    } as const); // 使用 as const 用以强调类型
    
    const testFn = (value, label) => ({ value: label, label: value });
    
    console.log(userTypeEnum._format(testFn)) 
    
    // [
    //   { value: '学生', label: 1 },
    //   { value: '专家', label: 2 },
    //   { value: { zh: '主讲', en: 'lecturer' }, label: 3 },
    //   { value: '班主任', label: 4 }
    // ]
    
    // _format 和 _f 二者效果相同, 不再演示

    支持TS推导

    支持TS推导

未来

如有希望支持的功能和想法可联系作者共同讨论

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago