[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [Type](https://evolu.dev/docs/api-reference/common/Type) › nextResult

```ts
function nextResult<ValueType, ErrorType, DoneType>(
  valueType: ValueType,
  errorType: ErrorType,
  doneType: DoneType,
): UnionType<
  [
    ObjectType<{
      ok: LiteralType<true>;
      value: ValueType;
    }>,
    ObjectType<{
      error: UnionType;
      ok: LiteralType<false>;
    }>,
  ]
>;
```

Defined in: [packages/common/src/Type.ts:3743](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Type.ts#L3743)

Creates a [Type](https://evolu.dev/docs/api-reference/common/Type/interfaces/Type) for [NextResult](https://evolu.dev/docs/api-reference/common/Result/type-aliases/NextResult) with three outcomes.

Validates results where the producer responds with:

- `Ok<A>` — produced a value
- `Err<Done<D>>` — completed normally with a done value
- `Err<E>` — failed with an error

### Example

```ts
const MyNextResult = nextResult(Item, MyError, Summary);

const validated = MyNextResult.fromUnknown(data);
if (!validated.ok) return validated;

const result = validated.value;
if (result.ok) {
  console.log(result.value);
} else if (result.error.type === "Done") {
  console.log("Done:", result.error.done);
} else {
  console.error(result.error);
}
```