vben
2021-01-19 ca4f1a8faf7d588c0d57d0dc81f4dc04cd757380
提交 | 用户 | age
2f6253 1 const toString = Object.prototype.toString;
2
3 export function is(val: unknown, type: string) {
4   return toString.call(val) === `[object ${type}]`;
5 }
6
144ab5 7 export function isDef<T = unknown>(val?: T): val is T {
2f6253 8   return typeof val !== 'undefined';
144ab5 9 }
2f6253 10
144ab5 11 export function isUnDef<T = unknown>(val?: T): val is T {
2f6253 12   return !isDef(val);
144ab5 13 }
2f6253 14
144ab5 15 export function isObject(val: any): val is Record<any, any> {
2f6253 16   return val !== null && is(val, 'Object');
144ab5 17 }
V 18
19 export function isEmpty<T = unknown>(val: T): val is T {
20   if (isArray(val) || isString(val)) {
21     return val.length === 0;
22   }
23
24   if (val instanceof Map || val instanceof Set) {
25     return val.size === 0;
26   }
27
28   if (isObject(val)) {
29     return Object.keys(val).length === 0;
30   }
31
32   return false;
33 }
2f6253 34
35 export function isDate(val: unknown): val is Date {
36   return is(val, 'Date');
37 }
38
39 export function isNull(val: unknown): val is null {
40   return val === null;
41 }
42
cedba3 43 export function isNullAndUnDef(val: unknown): val is null | undefined {
V 44   return isUnDef(val) && isNull(val);
45 }
46
ca4f1a 47 export function isNullOrUnDef(val: unknown): val is null | undefined {
V 48   return isUnDef(val) || isNull(val);
49 }
50
2f6253 51 export function isNumber(val: unknown): val is number {
52   return is(val, 'Number');
53 }
54
55 export function isPromise<T = any>(val: unknown): val is Promise<T> {
56   return is(val, 'Promise') && isObject(val) && isFunction(val.then) && isFunction(val.catch);
57 }
58
59 export function isString(val: unknown): val is string {
60   return is(val, 'String');
61 }
62
144ab5 63 export function isFunction(val: unknown): val is Function {
V 64   return typeof val === 'function';
65 }
2f6253 66
67 export function isBoolean(val: unknown): val is boolean {
68   return is(val, 'Boolean');
69 }
70
71 export function isRegExp(val: unknown): val is RegExp {
72   return is(val, 'RegExp');
73 }
74
c774a6 75 export function isArray(val: any): val is Array<any> {
2f6253 76   return val && Array.isArray(val);
77 }
78
144ab5 79 export function isWindow(val: any): val is Window {
2f6253 80   return typeof window !== 'undefined' && is(val, 'Window');
144ab5 81 }
2f6253 82
144ab5 83 export function isElement(val: unknown): val is Element {
2f6253 84   return isObject(val) && !!val.tagName;
144ab5 85 }
2f6253 86
87 export const isServer = typeof window === 'undefined';
88
46e087 89 export const isClient = typeof window !== 'undefined';
V 90
2f6253 91 export function isImageDom(o: Element) {
92   return o && ['IMAGE', 'IMG'].includes(o.tagName);
93 }
f75425 94
144ab5 95 export function isTextarea(element: Element | null): element is HTMLTextAreaElement {
f75425 96   return element !== null && element.tagName.toLowerCase() === 'textarea';
144ab5 97 }
189914 98
144ab5 99 export function isMobile(): boolean {
189914 100   return !!navigator.userAgent.match(
V 101     /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
102   );
144ab5 103 }
88f4a3 104
144ab5 105 export function isUrl(path: string): boolean {
88f4a3 106   const reg = /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/;
V 107   return reg.test(path);
144ab5 108 }