/* eslint-disable @typescript-eslint/no-explicit-any */ // 是否在浏览器 export const inBrowser = typeof window !== 'undefined' // 数值或者字符串 export type Numeric = number | string //是否定义 export const isDef = (val: T): val is NonNullable => val !== undefined && val !== null // eslint-disable-next-line @typescript-eslint/ban-types // 是否是函数 export const isFunction = (val: unknown) => typeof val === 'function' // 是否是对象 export const isObject = (val: unknown): val is Record => val !== null && typeof val === 'object' // 是否是promise export const isPromise = (val: unknown): val is Promise => isObject(val) && isFunction(val.then) && isFunction(val.catch) // 是否是日期 export const isDate = (val: unknown): val is Date => Object.prototype.toString.call(val) === '[object Date]' && !Number.isNaN((val as Date).getTime()) // 是否是电话 export function isMobile(value: string): boolean { value = value.replace(/[^-|\d]/g, '') return ( /^((\+86)|(86))?(1)\d{10}$/.test(value) || /^0[0-9-]{10,13}$/.test(value) ) } // 能否转换成数值类型 export const isNumeric = (val: Numeric): val is string => typeof val === 'number' || /^\d+(\.\d+)?$/.test(val) // 是不是 ios 环境 export const isIOS = inBrowser ? /ios|iphone|ipad|ipod/.test(navigator.userAgent.toLowerCase()) : false export const isAndroid = inBrowser ? /android|linux/.test(navigator.userAgent.toLowerCase()) : false