diff --git a/src/global.d.ts b/src/global.d.ts index 668028f..7c00502 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -17,8 +17,8 @@ type TreeNode = { sha?: string accessDenied?: boolean comments?: { - active: number, - resolved: number, + active: number + resolved: number } diff?: { status: 'modified' | 'added' | 'removed' | 'renamed' @@ -43,3 +43,10 @@ type VoidFN = (payload: T) => void type Async = T | Promise type EnumString = S | (string & {}) + +type JSONPrimitive = string | number | boolean | null | undefined +type JSONObject = { + [key: string]: JSONValue +} +type JSONArray = JSONValue[] +type JSONValue = JSONPrimitive | JSONObject | JSONArray diff --git a/src/utils/is.ts b/src/utils/is.ts new file mode 100644 index 0000000..b2ad89d --- /dev/null +++ b/src/utils/is.ts @@ -0,0 +1,16 @@ +export const is = { + boolean: (d: unknown): d is boolean => typeof d === 'boolean', + number: (d: unknown): d is number => typeof d === 'number', + string: (d: unknown): d is string => typeof d === 'string', + JSON: { + object(d: unknown): d is JSONObject { + return (typeof d === 'object' && d && !Array.isArray(d)) || false + }, + array(d: unknown): d is JSONArray { + return Array.isArray(d) + }, + plain(d: unknown): d is JSONPrimitive { + return d === null || d === 'undefined' || is.boolean(d) || is.number(d) || is.string(d) + }, + }, +}