Wit〆苗大
2022-07-05 91e13c4287ece777d65b3a19ce5ee23eabe4782f
提交 | 用户 | 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
9035fd 87 export function isMap(val: unknown): val is Map<any, any> {
1214b7 88   return is(val, 'Map');
89 }
90
2f6253 91 export const isServer = typeof window === 'undefined';
92
581007 93 export const isClient = !isServer;
88f4a3 94
144ab5 95 export function isUrl(path: string): boolean {
00fca0 96   const reg =
91e13c 97     /^(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/;
88f4a3 98   return reg.test(path);
144ab5 99 }