type Types =
  | 'Number'
  | 'String'
  | 'Boolean'
  | 'Null'
  | 'Undefined'
  | 'Array'
  | 'Object';

export const getType = function (value: any): Types {
  const typeofs = Object.prototype.toString.call(value);

  switch (typeofs) {
    case '[object Number]':
      return 'Number'; // NaN Infinity 也是Number类型

    case '[object String]':
      return 'String';

    case '[object Boolean]':
      return 'Boolean';

    case '[object Null]':
      return 'Null';

    case '[object Undefined]':
      return 'Undefined';

    case '[object Array]':
      return 'Array';

    case '[object Object]':
      return 'Object';

    default:
      return typeofs as any;
  }
};