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

## Call Signature

```ts
function filterSet<T, S>(
  set: ReadonlySet<T>,
  refinement: RefinementWithIndex<T, S>,
): ReadonlySet<S>;
```

Defined in: [packages/common/src/Set.ts:277](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Set.ts#L277)

Filters a set using a predicate or refinement function, returning a new
readonly set.

When used with a refinement function (with `value is Type` syntax),
TypeScript will narrow the result type.

### Filtering and refining

```ts

const evens = filterSet(new Set([1, 2, 3, 4, 5]), (x) => x % 2 === 0);
assertEqual(evens, new Set([2, 4]));

const mixed: ReadonlySet<string | number> = new Set([1, "a", 2, "b"]);
const strings = filterSet(
  mixed,
  (value): value is string => typeof value === "string",
);
assertType<ReadonlySet<string>, typeof strings>();
assertEqual(strings, new Set(["a", "b"]));
```

## Call Signature

```ts
function filterSet<T>(
  set: ReadonlySet<T>,
  predicate: PredicateWithIndex<T>,
): ReadonlySet<T>;
```

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

With predicate.