[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) › result

```ts
function result<OkType, ErrorType>(
  okType: ValidateElement<OkType>,
  errorType: ValidateElement<ErrorType>,
): DiscriminatedUnionType<
  "ok",
  readonly [
    StrictObjectType<{
      ok: LiteralType<true>;
      value: OkType;
    }>,
    StrictObjectType<{
      error: ErrorType;
      ok: LiteralType<false>;
    }>,
  ]
>;
```

Defined in: [packages/common/src/Type.ts:11741](https://github.com/evoluhq/evolu/blob/f0109fb501a593010e858e39248dde1200eeb2d7/packages/common/src/Type.ts#L11741)

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

Use this to validate Results crossing a storage, worker, API, or other
serialization boundary. `fromUnknown` returns an outer validation Result. Its
successful value is the inner domain Result described by `okType` and
`errorType`.

### Example

```ts
import {
  assertOk,
  NonNegativeInt,
  String,
  object,
  result,
  typed,
} from "@evolu/common";

const SyncResponse = result(
  object({ timestamp: NonNegativeInt }),
  typed("SyncFailed", { message: String }),
);

const validated = SyncResponse.fromUnknown({
  ok: true,
  value: { timestamp: 42 },
});

assertOk(validated, { ok: true, value: { timestamp: 42 } });
assertOk(validated.value, { timestamp: 42 });
```