-
Notifications
You must be signed in to change notification settings - Fork 116
Expand file tree
/
Copy pathis.ts
More file actions
90 lines (66 loc) · 2.87 KB
/
is.ts
File metadata and controls
90 lines (66 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
const getType = (payload: any): string =>
Object.prototype.toString.call(payload).slice(8, -1);
export const isUndefined = (payload: any): payload is undefined =>
typeof payload === 'undefined';
export const isNull = (payload: any): payload is null => payload === null;
export const isPlainObject = (
payload: any
): payload is { [key: string]: any } => {
if (typeof payload !== 'object' || payload === null) return false;
if (payload === Object.prototype) return false;
if (Object.getPrototypeOf(payload) === null) return true;
return Object.getPrototypeOf(payload) === Object.prototype;
};
export const isEmptyObject = (payload: any): payload is {} =>
isPlainObject(payload) && Object.keys(payload).length === 0;
export const isArray = (payload: any): payload is any[] =>
Array.isArray(payload);
export const isString = (payload: any): payload is string =>
typeof payload === 'string';
export const isNumber = (payload: any): payload is number =>
typeof payload === 'number' && !isNaN(payload);
export const isBoolean = (payload: any): payload is boolean =>
typeof payload === 'boolean';
export const isRegExp = (payload: any): payload is RegExp =>
payload instanceof RegExp;
export const isMap = (payload: any): payload is Map<any, any> =>
payload instanceof Map;
export const isSet = (payload: any): payload is Set<any> =>
payload instanceof Set;
export const isSymbol = (payload: any): payload is symbol =>
getType(payload) === 'Symbol';
export const isDate = (payload: any): payload is Date =>
payload instanceof Date && !isNaN(payload.valueOf());
export const isError = (payload: any): payload is Error =>
payload instanceof Error;
export const isAggregateError = (payload: any): payload is AggregateError =>
payload instanceof AggregateError
export const isNaNValue = (payload: any): payload is typeof NaN =>
typeof payload === 'number' && isNaN(payload);
export const isPrimitive = (
payload: any
): payload is boolean | null | undefined | number | string | symbol =>
isBoolean(payload) ||
isNull(payload) ||
isUndefined(payload) ||
isNumber(payload) ||
isString(payload) ||
isSymbol(payload);
export const isBigint = (payload: any): payload is bigint =>
typeof payload === 'bigint';
export const isInfinite = (payload: any): payload is number =>
payload === Infinity || payload === -Infinity;
export type TypedArrayConstructor =
| Int8ArrayConstructor
| Uint8ArrayConstructor
| Uint8ClampedArrayConstructor
| Int16ArrayConstructor
| Uint16ArrayConstructor
| Int32ArrayConstructor
| Uint32ArrayConstructor
| Float32ArrayConstructor
| Float64ArrayConstructor;
export type TypedArray = InstanceType<TypedArrayConstructor>;
export const isTypedArray = (payload: any): payload is TypedArray =>
ArrayBuffer.isView(payload) && !(payload instanceof DataView);
export const isURL = (payload: any): payload is URL => payload instanceof URL;