// 定义一个接口，键为字符串，值为任意类型
interface StringKeyObject {
    [key: string]: any;
}

/**
 * 分组函数
 * @param {Array} arr
 * @param {string|Function} generatekey
 * @returns {object}
 */
export function group<T>(arr: any[], generatekey: string | Function): Object {
    if (typeof generatekey === 'string') {
      const proName = generatekey;
      generatekey = (item: StringKeyObject) => item[proName];
    }
    return arr.reduce((result, currentValue) => {
      const key = generatekey(currentValue);
      (result[key] = result[key] || []).push(currentValue);
      return result;
    }, {});
  }