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

## Call Signature

```ts
function assertOk<R>(result: R): asserts result is Extract<R, Ok<unknown>>;
```

Defined in: [packages/common/src/Assert.ts:198](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Assert.ts#L198)

Asserts that a [Result](https://evolu.dev/docs/api-reference/common/Result/type-aliases/Result) is an [Ok](https://evolu.dev/docs/api-reference/common/Result/interfaces/Ok), optionally compares its value,
and narrows the Result.

With only a Result, this checks the variant without inspecting the value.
When an expected value is provided, it uses [eqData](https://evolu.dev/docs/api-reference/common/Eq/functions/eqData); its Data type is
inferred independently, so an unbranded literal can compare a branded
primitive or collection. Pass a custom [Eq](https://evolu.dev/docs/api-reference/common/Eq/type-aliases/Eq) when either value is outside
[Data](https://evolu.dev/docs/api-reference/common/Type/variables/Data) or needs domain-specific equality.

### Example

```ts
import {
  assertEqual,
  assertOk,
  assertType,
  ok,
  type Ok,
  type Result,
  type Typed,
} from "@evolu/common";

interface User {
  readonly id: string;
}

interface UserNotFoundError extends Typed<"UserNotFound"> {}

const result: Result<User, UserNotFoundError> = ok({ id: "user-1" });

assertOk(result);
assertType<Ok<User>, typeof result>();
assertEqual(result.value.id, "user-1");
```

## Call Signature

```ts
function assertOk<R>(
  result: R,
  expectedValue: InferOk<R>,
  eq: Eq<InferOk<R>>,
): asserts result is Extract<R, Ok<unknown>>;
```

Defined in: [packages/common/src/Assert.ts:201](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Assert.ts#L201)

Asserts that a [Result](https://evolu.dev/docs/api-reference/common/Result/type-aliases/Result) is an [Ok](https://evolu.dev/docs/api-reference/common/Result/interfaces/Ok), optionally compares its value,
and narrows the Result.

With only a Result, this checks the variant without inspecting the value.
When an expected value is provided, it uses [eqData](https://evolu.dev/docs/api-reference/common/Eq/functions/eqData); its Data type is
inferred independently, so an unbranded literal can compare a branded
primitive or collection. Pass a custom [Eq](https://evolu.dev/docs/api-reference/common/Eq/type-aliases/Eq) when either value is outside
[Data](https://evolu.dev/docs/api-reference/common/Type/variables/Data) or needs domain-specific equality.

### Example

```ts
import {
  assertEqual,
  assertOk,
  assertType,
  ok,
  type Ok,
  type Result,
  type Typed,
} from "@evolu/common";

interface User {
  readonly id: string;
}

interface UserNotFoundError extends Typed<"UserNotFound"> {}

const result: Result<User, UserNotFoundError> = ok({ id: "user-1" });

assertOk(result);
assertType<Ok<User>, typeof result>();
assertEqual(result.value.id, "user-1");
```

## Call Signature

```ts
function assertOk<R, ExpectedValue>(result: R, ...comparison: [ExpectedValue] & IsData<
  | ExpectedValue
  | InferOk<R>> extends true ? unknown : {
  ⛔ assertOk error: Result value and expected value must consist only of Data when no custom Eq is provided.: never;
}): asserts result is Extract<R, Ok<unknown>>;
```

Defined in: [packages/common/src/Assert.ts:207](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Assert.ts#L207)

Asserts that a [Result](https://evolu.dev/docs/api-reference/common/Result/type-aliases/Result) is an [Ok](https://evolu.dev/docs/api-reference/common/Result/interfaces/Ok), optionally compares its value,
and narrows the Result.

With only a Result, this checks the variant without inspecting the value.
When an expected value is provided, it uses [eqData](https://evolu.dev/docs/api-reference/common/Eq/functions/eqData); its Data type is
inferred independently, so an unbranded literal can compare a branded
primitive or collection. Pass a custom [Eq](https://evolu.dev/docs/api-reference/common/Eq/type-aliases/Eq) when either value is outside
[Data](https://evolu.dev/docs/api-reference/common/Type/variables/Data) or needs domain-specific equality.

### Example

```ts
import {
  assertEqual,
  assertOk,
  assertType,
  ok,
  type Ok,
  type Result,
  type Typed,
} from "@evolu/common";

interface User {
  readonly id: string;
}

interface UserNotFoundError extends Typed<"UserNotFound"> {}

const result: Result<User, UserNotFoundError> = ok({ id: "user-1" });

assertOk(result);
assertType<Ok<User>, typeof result>();
assertEqual(result.value.id, "user-1");
```