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

Defined in: [packages/common/src/RefCount.ts:76](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/RefCount.ts#L76)

Reference counts keyed by logical identity.

By default, [createRefCountByKey](https://evolu.dev/docs/api-reference/common/RefCount/functions/createRefCountByKey) uses reference identity, the same as
`Map` keys. Callers may instead provide a [lookup](https://evolu.dev/docs/api-reference/common/Lookup/type-aliases/Lookup) so logical
equality is based on a derived stable key. Decrementing a missing key is a
programmer error checked with [assert](https://evolu.dev/docs/api-reference/common/Assert/variables/assert).

## Extends

- [`Disposable`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#using-declarations-and-explicit-resource-management)

## Properties

<a id="dispose"></a>

### \[dispose\]

```ts
readonly [dispose]: () => void;
```

Defined in: [packages/common/src/RefCount.ts:98](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/RefCount.ts#L98)

Disposes and invalidates the helper. Further method calls throw.

#### Overrides

```ts
Disposable.[dispose]
```

---

<a id="decrement"></a>

### decrement

```ts
readonly decrement: (key: TKey) => number & Brand<"Int"> & Brand<"NonNegative">;
```

Defined in: [packages/common/src/RefCount.ts:86](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/RefCount.ts#L86)

Decrements key count and returns the new count.

Decrementing a missing key is a programmer error checked with
[assert](https://evolu.dev/docs/api-reference/common/Assert/variables/assert).

### getCount

```ts
readonly getCount: (key: TKey) => number & Brand<"Int"> & Brand<"NonNegative">;
```

Defined in: [packages/common/src/RefCount.ts:89](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/RefCount.ts#L89)

Gets current count for key. Returns `0` when the key is not tracked.

### has

```ts
readonly has: (key: TKey) => boolean;
```

Defined in: [packages/common/src/RefCount.ts:92](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/RefCount.ts#L92)

Returns `true` when the key is tracked with count greater than zero.

### increment

```ts
readonly increment: (key: TKey) => number & Brand<"Int"> & Brand<"NonNegative"> & Brand<"Positive">;
```

Defined in: [packages/common/src/RefCount.ts:78](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/RefCount.ts#L78)

Increments key count and returns the new count.

### keys

```ts
readonly keys: () => ReadonlySet<TKey>;
```

Defined in: [packages/common/src/RefCount.ts:95](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/RefCount.ts#L95)

Returns all currently tracked keys.