• pick并且重命名

    新属性名作为键名的好处是可以多个属性对应一个值

    类型参数

    • T extends object
    • K extends string | number | symbol
    • O extends {
          [k: string]: K;
      }

    参数

    • originObj: T

      需要遍历的对象

    • pickKeyMap: O

      key map

    • 可选cb: ((value: T[O[keyof O]], key: O[keyof O], originObj: T) => T[O[keyof O]])

      对值进行修改

        • (value, key, originObj): T[O[keyof O]]
        • 参数

          • value: T[O[keyof O]]
          • key: O[keyof O]
          • originObj: T

          返回 T[O[keyof O]]

    返回 {
        [k in keyof O]: T[O[k]]
    }

    const obj = { a: 1, b: '2', c: ['12313', 111], d: false, e: { a: 1 }, f: undefined };

    pickRename(obj, {}); // {}
    pickRename(obj, { A: 'a' }); // { A: 1 }
    pickRename(obj, { B: 'b' }); // { B: obj.b }
    pickRename(obj, { C: 'c' }); // { C: obj.c }
    pickRename(obj, { D: 'd' }); // { D: obj.d }
    pickRename(obj, { E: 'e' }); // { E: obj.e }
    // 不存在于对象中的属性会忽略
    pickRename(obj, { G: 'G' as any }); // {}