UNPKG

@types/check-types

Version:
209 lines (168 loc) 5.67 kB
type NegationFunction = (val: any) => boolean; type MaybeFunction = <T>(val: T) => boolean | T; type CheckTypePredicates = Pick< CheckType, | "equal" | "undefined" | "null" | "assigned" | "primitive" | "zero" | "infinity" | "number" | "integer" | "even" | "odd" | "greater" | "less" | "between" | "greaterOrEqual" | "lessOrEqual" | "inRange" | "positive" | "negative" | "string" | "emptyString" | "nonEmptyString" | "contains" | "match" | "boolean" | "object" | "emptyObject" | "nonEmptyObject" | "instanceStrict" | "instance" | "like" | "array" | "emptyArray" | "nonEmptyArray" | "arrayLike" | "iterable" | "date" | "function" | "hasLength" | "containsKey" | "in" >; interface ArrayFunction { (a: any): a is any[]; of: CheckTypePredicates; } interface ArrayLikeFunction { (a: any): a is ArrayLike<any>; of: CheckTypePredicates; } interface IterableFunction { (a: any): a is Iterable<any>; of: CheckTypePredicates; } interface ObjectFunction { (a: any): a is object; of: CheckTypePredicates; } type AssertExtended<T extends any[], R> = (...args: [...T, string?]) => R; type ExtendWithAssert<T> = { [K in keyof T]: T[K] extends (...a: infer U) => infer R ? AssertExtended<U, R> & ExtendWithAssert<T[K]> : ExtendWithAssert<T[K]>; }; interface AssertFunction { <T>(possibleFalsy: T, message?: string, errorType?: { new(...args: any[]): any }): T; } interface CheckType { /* General predicates */ equal(a: any, b: any): boolean; null(a: any): a is null; undefined(a: any): a is undefined; assigned(a: any): boolean; primitive(a: any): a is number | string | boolean | null | undefined | symbol; hasLength(a: any, length: number): boolean; /* String predicates */ string(a: any): a is string; emptyString(a: any): boolean; nonEmptyString(a: any): boolean; match(a: string, b: RegExp): boolean; /* Number predicates */ number(a: any): a is number; integer(a: any): a is number; zero(a: any): boolean; infinity(a: any): boolean; greater(num: number, greaterThan: number): boolean; greaterOrEqual(num: number, greaterOrEqual: number): boolean; less(num: number, lessThan: number): boolean; lessOrEqual(num: number, lessOrEqual: number): boolean; /** * Excluding a and b. Any order of a, b */ between(num: number, a: number, b: number): boolean; /** * Including a, b. Any order of a, b */ inRange(num: number, a: number, b: number): boolean; positive(num: number): boolean; negative(num: number): boolean; odd(num: number): boolean; even(num: number): boolean; /* Boolean predicates */ boolean(a: any): a is boolean; /* Object predicates */ object: ObjectFunction; emptyObject(a: any): boolean; nonEmptyObject(a: any): boolean; /** * Checking via instanceof */ instanceStrict<T extends object>(a: any, prototype: T): a is T; /** * Checking via instanceof, fallback constructor.name and .toString() */ instance<T extends object>(a: any, prototype: T): a is T; /** * Duck type checking. Structural in other words. Checking if a has all properties of duck */ like<T extends object>(a: any, duck: T): a is T; /* Array predicates */ array: ArrayFunction; emptyArray(a: any): boolean; nonEmptyArray(a: any): boolean; arrayLike: ArrayLikeFunction; iterable: IterableFunction; includes(a: any[], value: any): boolean; /* Date predicates */ date(a: any): a is Date; /* Function predicates */ function(a: any): a is (...args: any[]) => any; /* Modifiers (some of them in their respected sections) */ not: CheckTypePredicates & NegationFunction; maybe: CheckTypePredicates & MaybeFunction; assert: ExtendWithAssert<CheckTypePredicates> & ExtendWithAssert<Pick<CheckType, "not" | "maybe">> & AssertFunction; /* Batch operations */ /** * Applying predicate to every element of array and returning resulting array * * Example: apply([2, 3, "four"], check.number) => [true, true, false] */ apply<T>(arr: any[], predicate: (...args: any[]) => T): T[]; // Also some difficulties with returning object with only defined in predicates object propertis. // Will gladly accept help or ideas. Now using any for returned object map<T extends { [k: string]: any }>( arr: T, predicates: Partial<{ [k in keyof T]: (...args: any[]) => boolean }>, ): Partial<{ [k in keyof T]: any }>; all(arr: boolean[] | { [k: string]: boolean }): boolean; any(arr: boolean[] | { [k: string]: boolean }): boolean; /* Searching keys and values */ in(substring: string, a: string): boolean; in(value: any, a: object): boolean; in<T = any>(value: T, a: T[] | Set<T> | Map<any, T> | Iterable<T>): boolean; contains(a: string, substring: string): boolean; contains(a: object, value: any): boolean; contains<T = any>(a: T[] | Set<T> | Map<any, T> | Iterable<T>, value: T): boolean; keyIn(key: number | string, a: string | any[]): boolean; keyIn(key: number | string | symbol, a: object): boolean; keyIn<K = any>(key: K, a: Map<K, any>): boolean; containsKey(a: string | any[], key: number | string): boolean; containsKey(a: object, key: number | string | symbol): boolean; containsKey<K = any>(a: Map<K, any>, key: K): boolean; } declare const check: CheckType; export = check;