Skip to content
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
d57d7e8
Create or-multiple.d.ts
salisbury-espinosa Mar 14, 2026
cd81550
Update index.d.ts (append OrMultiple)
salisbury-espinosa Mar 14, 2026
bbae50f
Create or-multiple.ts test
salisbury-espinosa Mar 14, 2026
f32baf1
Update readme.md
salisbury-espinosa Mar 14, 2026
1935cb0
Update or-multiple.d.ts
salisbury-espinosa Mar 14, 2026
7cabdee
Merge branch 'sindresorhus:main' into feat/append-OrMultiple
salisbury-espinosa Mar 16, 2026
1c1562d
Update or-multiple.d.ts => using SomeExtend
salisbury-espinosa Mar 16, 2026
d6a7f1f
Update or-multiple.d.ts - fix jsdoc
salisbury-espinosa Mar 16, 2026
b08270b
Update or-multiple.d.ts fix jsdoc
salisbury-espinosa Mar 16, 2026
ff8dee1
Update or-multiple.d.ts fix js-doc
salisbury-espinosa Mar 16, 2026
523841d
doc: align JSDoc with `Or`'s JSDoc
som-sm Mar 17, 2026
911b6eb
test: remove duplicate case
som-sm Mar 17, 2026
389a80a
test: improve existing cases and add new cases
som-sm Mar 17, 2026
995dfe4
fix: description in README
som-sm Mar 17, 2026
1cde15d
Update and rename or-multiple.d.ts to or-all.d.ts
salisbury-espinosa Mar 17, 2026
b6d323c
Update and rename or-multiple.ts to or-all.ts
salisbury-espinosa Mar 17, 2026
e251af8
Update index.d.ts
salisbury-espinosa Mar 17, 2026
75b7d98
Update readme.md
salisbury-espinosa Mar 17, 2026
a73e8dd
Update or-all.ts
salisbury-espinosa Mar 17, 2026
73e58a1
doc: add links in JSDoc
som-sm Mar 18, 2026
1dc5836
refactor: rewrite `Or` using `OrAll`
som-sm Mar 18, 2026
23c29dc
test: add union cases
som-sm Mar 18, 2026
04f2169
test: add more cases
som-sm Mar 18, 2026
2a0060e
doc: add missing `@example` tags
som-sm Mar 18, 2026
16acd37
test: fix incorrect order
som-sm Mar 18, 2026
7c2c8f2
doc: add note regarding empty tuple (`[]`)
som-sm Mar 18, 2026
280a7c5
Update readme.md
sindresorhus Mar 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ export type {IfNull} from './source/if-null.d.ts';
export type {IsUndefined} from './source/is-undefined.d.ts';
export type {And} from './source/and.d.ts';
export type {Or} from './source/or.d.ts';
export type {OrMultiple} from './source/or-multiple.d.ts';
export type {Xor} from './source/xor.d.ts';
export type {AllExtend, AllExtendOptions} from './source/all-extend.d.ts';
export type {SomeExtend, SomeExtendOptions} from './source/some-extend.d.ts';
Expand Down
1 change: 1 addition & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,7 @@ Click the type names for complete docs.
- [`And`](source/and.d.ts) - Returns a boolean for whether two given types are both true.
- [`Or`](source/or.d.ts) - Returns a boolean for whether either of two given types is true.
- [`Xor`](source/xor.d.ts) - Returns a boolean for whether only one of two given types is true.
- [`OrMultiple`](source/or-multiple.d.ts) - Returns a boolean for whether any of the given elements is `true`.
- [`AllExtend`](source/all-extend.d.ts) - Returns a boolean for whether every element in an array type extends another type.
- [`SomeExtend`](source/some-extend.d.ts) - Returns a boolean for whether some element in an array type extends another type.
- [`NonEmptyTuple`](source/non-empty-tuple.d.ts) - Matches any non-empty tuple.
Expand Down
63 changes: 63 additions & 0 deletions source/or-multiple.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import type {SomeExtend} from './some-extend.d.ts';

/**
Returns a boolean for whether any of the given elements is `true`.

Use-cases:
- Check if at least one condition in a list of booleans is met.

@example
```
import type {OrMultiple} from 'type-fest';

type FFT = OrMultiple<[false, false, true]>;
//=> true

type FFF = OrMultiple<[false, false, false]>;
//=> false
```

Note: When `boolean` is passed as an element, it is distributed into separate cases, and the final result is a union of those cases.
For example, `OrMultiple<[false, boolean]>` expands to `OrMultiple<[false, true]> | OrMultiple<[false, false]>`, which simplifies to `true | false` (i.e., `boolean`).

```
import type {OrMultiple} from 'type-fest';

type A = OrMultiple<[false, boolean]>;
//=> boolean

type B = OrMultiple<[true, boolean]>;
//=> true
```

Note: If `never` is passed as an element, it is treated as `false` and the result is computed accordingly.
```
import type {OrMultiple} from 'type-fest';

type A = OrMultiple<[never, never, true]>;
//=> true

type B = OrMultiple<[never, never, false]>;
//=> false

type C = OrMultiple<[never, never, never]>;
//=> false

type D = OrMultiple<[never, never, boolean]>;
//=> boolean
```

Note: If `any` is passed as an element, it is treated as `boolean` and the result is computed accordingly.
```
import type {OrMultiple} from 'type-fest';

type A = OrMultiple<[false, any]>;
//=> boolean

type B = OrMultiple<[true, any]>;
//=> true
```
*/
export type OrMultiple<T extends readonly boolean[]> = SomeExtend<T, true>;

export {};
30 changes: 30 additions & 0 deletions test-d/or-multiple.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import {expectType} from 'tsd';
import type {OrMultiple} from '../source/or-multiple.d.ts';

declare const boolean: boolean;

// Basic boolean combinations
expectType<OrMultiple<[true, false]>>(true);
expectType<OrMultiple<[false, true]>>(true);
expectType<OrMultiple<[true, true]>>(true);
expectType<OrMultiple<[false, false]>>(false);

// Multiple elements in a tuple
expectType<OrMultiple<[false, false, false, true]>>(true);
expectType<OrMultiple<[false, false, false, false]>>(false);

// `boolean` element
expectType<OrMultiple<[false, false, boolean]>>(boolean);
expectType<OrMultiple<[false, boolean, true]>>(true);
expectType<OrMultiple<[boolean, boolean, boolean]>>(boolean);

// Boundary cases
expectType<OrMultiple<[]>>(false);

expectType<OrMultiple<[any, any, false]>>(boolean);
expectType<OrMultiple<[any, any, true]>>(true);
expectType<OrMultiple<[any, any, any]>>(boolean);

expectType<OrMultiple<[never, never, false]>>(false);
expectType<OrMultiple<[never, never, true]>>(true);
expectType<OrMultiple<[never, never, never]>>(false);
Loading