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

## Call Signature

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

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

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

With only a Result, this checks the variant without inspecting the error.
When an expected error 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,
  assertErr,
  assertType,
  err,
  type Err,
  type Result,
  type Typed,
} from "@evolu/common";

interface UserNotFoundError extends Typed<"UserNotFound"> {
  readonly id: string;
}

const result: Result<string, UserNotFoundError> = err({
  type: "UserNotFound",
  id: "user-1",
});

assertErr(result);
assertType<Err<UserNotFoundError>, typeof result>();
assertEqual(result.error.id, "user-1");
```

## Call Signature

```ts
function assertErr<R>(
  result: R,
  expectedError: InferErr<R>,
  eq: Eq<InferErr<R>>,
): asserts result is Extract<R, Err<unknown>>;
```

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

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

With only a Result, this checks the variant without inspecting the error.
When an expected error 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,
  assertErr,
  assertType,
  err,
  type Err,
  type Result,
  type Typed,
} from "@evolu/common";

interface UserNotFoundError extends Typed<"UserNotFound"> {
  readonly id: string;
}

const result: Result<string, UserNotFoundError> = err({
  type: "UserNotFound",
  id: "user-1",
});

assertErr(result);
assertType<Err<UserNotFoundError>, typeof result>();
assertEqual(result.error.id, "user-1");
```

## Call Signature

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

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

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

With only a Result, this checks the variant without inspecting the error.
When an expected error 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,
  assertErr,
  assertType,
  err,
  type Err,
  type Result,
  type Typed,
} from "@evolu/common";

interface UserNotFoundError extends Typed<"UserNotFound"> {
  readonly id: string;
}

const result: Result<string, UserNotFoundError> = err({
  type: "UserNotFound",
  id: "user-1",
});

assertErr(result);
assertType<Err<UserNotFoundError>, typeof result>();
assertEqual(result.error.id, "user-1");
```