parent
c68ad76062
commit
1f2440ae0d
3 changed files with 76 additions and 0 deletions
|
|
@ -318,6 +318,7 @@ const is = Object.assign(
|
|||
urlInstance: isUrlInstance,
|
||||
urlSearchParams: isUrlSearchParams,
|
||||
urlString: isUrlString,
|
||||
optional: isOptional,
|
||||
validDate: isValidDate,
|
||||
validLength: isValidLength,
|
||||
weakMap: isWeakMap,
|
||||
|
|
@ -342,6 +343,10 @@ export function isAny(predicate: Predicate | Predicate[], ...values: unknown[]):
|
|||
);
|
||||
}
|
||||
|
||||
export function isOptional<T>(value: unknown, predicate: (value: unknown) => value is T): value is T | undefined {
|
||||
return isUndefined(value) || predicate(value);
|
||||
}
|
||||
|
||||
export function isArray<T = unknown>(value: unknown, assertion?: (value: T) => value is T): value is T[] {
|
||||
if (!Array.isArray(value)) {
|
||||
return false;
|
||||
|
|
@ -940,11 +945,19 @@ type Assert = {
|
|||
// Variadic functions.
|
||||
any: (predicate: Predicate | Predicate[], ...values: unknown[]) => void | never;
|
||||
all: (predicate: Predicate, ...values: unknown[]) => void | never;
|
||||
|
||||
/**
|
||||
Asserts that `value` is `undefined` or satisfies the provided `assertion`.
|
||||
|
||||
Useful for optional inputs.
|
||||
*/
|
||||
optional: <T>(value: unknown, assertion: (value: unknown, message?: string) => asserts value is T, message?: string) => asserts value is T | undefined;
|
||||
};
|
||||
|
||||
export const assert: Assert = {
|
||||
all: assertAll,
|
||||
any: assertAny,
|
||||
optional: assertOptional,
|
||||
array: assertArray,
|
||||
arrayBuffer: assertArrayBuffer,
|
||||
arrayLike: assertArrayLike,
|
||||
|
|
@ -1148,6 +1161,12 @@ export function assertAny(predicate: Predicate | Predicate[], ...values: unknown
|
|||
}
|
||||
}
|
||||
|
||||
export function assertOptional<T>(value: unknown, assertion: (value: unknown, message?: string) => asserts value is T, message?: string): asserts value is T | undefined {
|
||||
if (!isUndefined(value)) {
|
||||
assertion(value, message);
|
||||
}
|
||||
}
|
||||
|
||||
export function assertArray<T = unknown>(value: unknown, assertion?: (element: unknown, message?: string) => asserts element is T, message?: string): asserts value is T[] {
|
||||
if (!isArray(value)) {
|
||||
throw new TypeError(message ?? typeErrorMessage('Array', value));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue