> For AI agents: the complete documentation index is available at /byethrow/ja/llms.txt, the full documentation bundle is available at /byethrow/ja/llms-full.txt.

# Function: collect()

Processes multiple [Result](/byethrow/ja/api/types/Result.Result.md) or [ResultAsync](/byethrow/ja/api/types/Result.ResultAsync.md) values into a single result.
If all results are [Success](/byethrow/ja/api/types/Result.Success.md), returns a [Success](/byethrow/ja/api/types/Result.Success.md) containing all values.
If any result is a [Failure](/byethrow/ja/api/types/Result.Failure.md), returns a [Failure](/byethrow/ja/api/types/Result.Failure.md) containing an array of all errors.

Unlike [sequence](/byethrow/ja/api/functions/Result.sequence.md), which stops at the first error and returns only that error,
`collect` processes all results and collects all errors.

## Type Param

**X**

The input type (object or array of Results).

## Examples

**Object of Results (all succeed)**

```ts
import { Result } from '@praha/byethrow';

const result = Result.collect({
  name: Result.succeed('Alice'),
  age: Result.succeed(20),
});
// { type: 'Success', value: { name: 'Alice', age: 20 } }
```

**Object of Results (some fail)**

```ts
import { Result } from '@praha/byethrow';

const result = Result.collect({
  name: Result.succeed('Alice'),
  age: Result.fail('Invalid age'),
});
// { type: 'Failure', error: ['Invalid age'] }
```

**Array of Results (all succeed)**

```ts
import { Result } from '@praha/byethrow';

const result = Result.collect([
  Result.succeed(1),
  Result.succeed(2),
  Result.succeed(3),
]);
// { type: 'Success', value: [1, 2, 3] }
```

**Array of Results (some fail)**

```ts
import { Result } from '@praha/byethrow';

const result = Result.collect([
  Result.succeed(1),
  Result.fail('error1'),
  Result.fail('error2'),
]);
// { type: 'Failure', error: ['error1', 'error2'] }
```

**Using a mapper function (all succeed)**

```ts
import { Result } from '@praha/byethrow';

const result = Result.collect(['1', '2', '3'], (value) => {
  const number = Number(value);
  return Number.isNaN(number)
    ? Result.fail(`Invalid number: ${value}`)
    : Result.succeed(number);
});
// { type: 'Success', value: [1, 2, 3] }
```

**Using a mapper function (some fail)**

```ts
import { Result } from '@praha/byethrow';

const result = Result.collect(['1', 'invalid', '3'], (value) => {
  const number = Number(value);
  return Number.isNaN(number)
    ? Result.fail(`Invalid number: ${value}`)
    : Result.succeed(number);
});
// { type: 'Failure', error: ['Invalid number: invalid'] }
```

## Call Signature

> **collect**\<`X`>(`x`): [`ResultFor`](/byethrow/ja/api/types/Result.ResultFor.md)\<`X`\[keyof `X`], \{ \[K in string | number | symbol]: InferSuccess\<X\[K]> }, [`InferFailure`](/byethrow/ja/api/types/Result.InferFailure.md)\<`X`\[keyof `X`]>\[]>

### Type Parameters

#### X

`X` _extends_ `Record`\<`string`, [`ResultMaybeAsync`](/byethrow/ja/api/types/Result.ResultMaybeAsync.md)\<`any`, `any`>>

### Parameters

#### x

`X`

### Returns

[`ResultFor`](/byethrow/ja/api/types/Result.ResultFor.md)\<`X`\[keyof `X`], \{ \[K in string | number | symbol]: InferSuccess\<X\[K]> }, [`InferFailure`](/byethrow/ja/api/types/Result.InferFailure.md)\<`X`\[keyof `X`]>\[]>

## Call Signature

> **collect**\<`X`>(`x`): [`ResultFor`](/byethrow/ja/api/types/Result.ResultFor.md)\<`X`\[`number`], \{ \[K in string | number | symbol]: InferSuccess\<X\[K]> }, [`InferFailure`](/byethrow/ja/api/types/Result.InferFailure.md)\<`X`\[`number`]>\[]>

### Type Parameters

#### X

`X` _extends_ [`ResultMaybeAsync`](/byethrow/ja/api/types/Result.ResultMaybeAsync.md)\<`any`, `any`>\[]

### Parameters

#### x

`X`

### Returns

[`ResultFor`](/byethrow/ja/api/types/Result.ResultFor.md)\<`X`\[`number`], \{ \[K in string | number | symbol]: InferSuccess\<X\[K]> }, [`InferFailure`](/byethrow/ja/api/types/Result.InferFailure.md)\<`X`\[`number`]>\[]>

## Call Signature

> **collect**\<`X`>(`x`): [`ResultFor`](/byethrow/ja/api/types/Result.ResultFor.md)\<`X`\[`number`], \{ \[K in string | number | symbol]: InferSuccess\<X\[K]> }, [`InferFailure`](/byethrow/ja/api/types/Result.InferFailure.md)\<`X`\[`number`]>\[]>

### Type Parameters

#### X

`X` _extends_ readonly [`ResultMaybeAsync`](/byethrow/ja/api/types/Result.ResultMaybeAsync.md)\<`any`, `any`>\[]

### Parameters

#### x

`X`

### Returns

[`ResultFor`](/byethrow/ja/api/types/Result.ResultFor.md)\<`X`\[`number`], \{ \[K in string | number | symbol]: InferSuccess\<X\[K]> }, [`InferFailure`](/byethrow/ja/api/types/Result.InferFailure.md)\<`X`\[`number`]>\[]>

## Call Signature

> **collect**\<`X`, `Fn`>(`x`, `fn`): [`ResultFor`](/byethrow/ja/api/types/Result.ResultFor.md)\<`ReturnType`\<`Fn`>, \{ \[K in string | number | symbol]: InferSuccess\<Fn> }, [`InferFailure`](/byethrow/ja/api/types/Result.InferFailure.md)\<`Fn`>\[]>

### Type Parameters

#### X

`X` _extends_ `unknown`\[]

#### Fn

`Fn` _extends_ (`value`) => [`ResultMaybeAsync`](/byethrow/ja/api/types/Result.ResultMaybeAsync.md)\<`any`, `any`>

### Parameters

#### x

`X`

#### fn

`Fn`

### Returns

[`ResultFor`](/byethrow/ja/api/types/Result.ResultFor.md)\<`ReturnType`\<`Fn`>, \{ \[K in string | number | symbol]: InferSuccess\<Fn> }, [`InferFailure`](/byethrow/ja/api/types/Result.InferFailure.md)\<`Fn`>\[]>

## Call Signature

> **collect**\<`X`, `Fn`>(`x`, `fn`): [`ResultFor`](/byethrow/ja/api/types/Result.ResultFor.md)\<`ReturnType`\<`Fn`>, \{ \[K in string | number | symbol]: InferSuccess\<Fn> }, [`InferFailure`](/byethrow/ja/api/types/Result.InferFailure.md)\<`Fn`>\[]>

### Type Parameters

#### X

`X` _extends_ readonly `unknown`\[]

#### Fn

`Fn` _extends_ (`value`) => [`ResultMaybeAsync`](/byethrow/ja/api/types/Result.ResultMaybeAsync.md)\<`any`, `any`>

### Parameters

#### x

`X`

#### fn

`Fn`

### Returns

[`ResultFor`](/byethrow/ja/api/types/Result.ResultFor.md)\<`ReturnType`\<`Fn`>, \{ \[K in string | number | symbol]: InferSuccess\<Fn> }, [`InferFailure`](/byethrow/ja/api/types/Result.InferFailure.md)\<`Fn`>\[]>
