Skip to content

or

The or() function combines several predicates or type guards: if at least one passes, the result is true and the type is narrowed to the union of accepted cases.

Interactive example

Syntax

typescript
type ExtractPredicate<
	GenericPredicatedInput extends readonly AnyFunction<any[], boolean>[]
> = GenericPredicatedInput extends readonly [
	(input: any, ...args: any[]) => input is infer InferredPredicate,
	...infer InferredRest extends readonly AnyPredicate[]
] ? InferredRest extends readonly []
	? InferredPredicate
	: ExtractPredicate<InferredRest> extends infer InferredResult
		? IsEqual<InferredResult, never> extends true
			? never
			: InferredPredicate | InferredResult
		: never
	: never;

Classic signatures

typescript
// Type Guard predicate
function or<
	GenericInput extends unknown,
	const GenericArrayPredicatedInput extends readonly [
		(input: GenericInput) => input is any,
		(input: GenericInput) => input is any,
		...((input: GenericInput) => input is any)[]
	]
>(
	input: GenericInput,
	predicatedList: GenericArrayPredicatedInput
): input is Extract<GenericInput, ExtractPredicate<GenericArrayPredicatedInput>>;

// Boolean predicate
function or<
	GenericInput extends unknown
>(
	input: GenericInput,
	predicatedList: [
		(input: GenericInput) => boolean,
		(input: GenericInput) => boolean,
		...((input: GenericInput) => boolean)[]
	]
): boolean;

Curried signatures

typescript
// Type Guard predicate
function or<
	GenericInput extends unknown,
	const GenericArrayPredicatedInput extends readonly [
		(input: GenericInput) => input is any,
		(input: GenericInput) => input is any,
		...((input: GenericInput) => input is any)[]
	]
>(
	predicatedList: GenericArrayPredicatedInput
): (input: GenericInput) => input is Extract<GenericInput, ExtractPredicate<GenericArrayPredicatedInput>>;

// Boolean predicate
function or<
	GenericInput extends unknown
>(
	predicatedList: [
		(input: GenericInput) => boolean,
		(input: GenericInput) => boolean,
		...((input: GenericInput) => boolean)[]
	]
): (input: GenericInput) => boolean;

Parameters

  • predicatedList : Array of functions testing the input (can be type guards).
  • input (direct overload) : Tested value.

Return value

A boolean (or a type guard if the predicates are) true if at least one predicate passes.

See also

  • and - Intersection of predicates

Released under the MIT license.