| | |
| | | export { |
| | | isArguments, |
| | | isArrayBuffer, |
| | | isArrayLike, |
| | | isArrayLikeObject, |
| | | isBuffer, |
| | | isBoolean, |
| | | isDate, |
| | | isElement, |
| | | isEmpty, |
| | | isEqual, |
| | | isEqualWith, |
| | | isError, |
| | | isFunction, |
| | | isFinite, |
| | | isLength, |
| | | isMap, |
| | | isMatch, |
| | | isMatchWith, |
| | | isNative, |
| | | isNil, |
| | | isNumber, |
| | | isNull, |
| | | isObjectLike, |
| | | isPlainObject, |
| | | isRegExp, |
| | | isSafeInteger, |
| | | isSet, |
| | | isString, |
| | | isSymbol, |
| | | isTypedArray, |
| | | isUndefined, |
| | | isWeakMap, |
| | | isWeakSet, |
| | | } from 'lodash-es'; |
| | | const toString = Object.prototype.toString; |
| | | |
| | | export function is(val: unknown, type: string) { |
| | | return toString.call(val) === `[object ${type}]`; |
| | | } |
| | | |
| | | export const isDef = <T = unknown>(val?: T): val is T => { |
| | | export function isDef<T = unknown>(val?: T): val is T { |
| | | return typeof val !== 'undefined'; |
| | | }; |
| | | } |
| | | |
| | | export const isUnDef = <T = unknown>(val?: T): val is T => { |
| | | return !isDef(val); |
| | | }; |
| | | |
| | | export const isObject = (val: any): val is Record<any, any> => { |
| | | // TODO 此处 isObject 存在歧义 |
| | | export function isObject(val: any): val is Record<any, any> { |
| | | return val !== null && is(val, 'Object'); |
| | | }; |
| | | |
| | | export function isDate(val: unknown): val is Date { |
| | | return is(val, 'Date'); |
| | | } |
| | | |
| | | export function isNull(val: unknown): val is null { |
| | | return val === null; |
| | | } |
| | | |
| | | export function isNullAndUnDef(val: unknown): val is null | undefined { |
| | | return isUnDef(val) && isNull(val); |
| | | } |
| | | |
| | | export function isNumber(val: unknown): val is number { |
| | | return is(val, 'Number'); |
| | | } |
| | | |
| | | export function isPromise<T = any>(val: unknown): val is Promise<T> { |
| | | return is(val, 'Promise') && isObject(val) && isFunction(val.then) && isFunction(val.catch); |
| | | } |
| | | |
| | | export function isString(val: unknown): val is string { |
| | | return is(val, 'String'); |
| | | } |
| | | |
| | | export const isFunction = (val: unknown): val is Function => typeof val === 'function'; |
| | | |
| | | export function isBoolean(val: unknown): val is boolean { |
| | | return is(val, 'Boolean'); |
| | | } |
| | | |
| | | export function isRegExp(val: unknown): val is RegExp { |
| | | return is(val, 'RegExp'); |
| | | } |
| | | |
| | | export function isArray(val: unknown): val is Array<any> { |
| | | // TODO 此处 isArray 存在歧义 |
| | | export function isArray(val: any): val is Array<any> { |
| | | return val && Array.isArray(val); |
| | | } |
| | | |
| | | export const isWindow = (val: any): val is Window => { |
| | | export function isWindow(val: any): val is Window { |
| | | return typeof window !== 'undefined' && is(val, 'Window'); |
| | | }; |
| | | |
| | | export const isElement = (val: unknown): val is Element => { |
| | | return isObject(val) && !!val.tagName; |
| | | }; |
| | | } |
| | | |
| | | export const isServer = typeof window === 'undefined'; |
| | | |
| | | export const isClient = typeof window !== 'undefined'; |
| | | export const isClient = !isServer; |
| | | |
| | | export function isImageDom(o: Element) { |
| | | return o && ['IMAGE', 'IMG'].includes(o.tagName); |
| | | export function isHttpUrl(path: string): boolean { |
| | | const reg = /^http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?/; |
| | | return reg.test(path); |
| | | } |
| | | |
| | | export const isTextarea = (element: Element | null): element is HTMLTextAreaElement => { |
| | | return element !== null && element.tagName.toLowerCase() === 'textarea'; |
| | | }; |
| | | |
| | | export const isMobile = (): boolean => { |
| | | return !!navigator.userAgent.match( |
| | | /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i |
| | | ); |
| | | }; |
| | | export function isPascalCase(str: string): boolean { |
| | | const regex = /^[A-Z][A-Za-z]*$/; |
| | | return regex.test(str); |
| | | } |