# Filter types

Public types and methods for filter types.

[Read the richer queries guide](/docs/queries/). Signatures below come from the published SDK declarations. Access SDK services through `db`; use their constructors only when integrating at a lower level.

## QueryOperator


```ts
type QueryOperator =
  | "eq"
  | "neq"
  | "in"
  | "gt"
  | "gte"
  | "lt"
  | "lte"
  | "is"
  | "textSearch"
  | "contains"
  | "containedBy"
  | "overlaps"
  | "like"
  | "ilike";
```

## FilterOperator


```ts
type FilterOperator = QueryOperator | "cs" | "cd" | "ov";
```

## QueryField


```ts
type QueryField<T> = Keys<T> | `${JsonRoot<T>}->${string}`;
```

## QueryFieldValue


```ts
type QueryFieldValue<T, K extends string> = K extends keyof T
  ? T[K]
  : K extends `${infer Root}->${infer Rest}`
    ? Root extends keyof T
      ? Rest extends `>${string}`
        ? string | null | undefined
        : JsonPathValue<T[Root], Rest>
      : unknown
    : unknown;
```

## DeepPartial


```ts
type DeepPartial<T> = T extends readonly (infer V)[]
  ? readonly DeepPartial<V>[]
  : T extends object
    ? {
        [K in keyof T]?: DeepPartial<T[K]>;
      }
    : T;
```

## FilterValue


```ts
type FilterValue<T, O extends FilterOperator> = O extends "in"
  ? readonly T[]
  : O extends "is"
    ? null | boolean
    : O extends "like" | "ilike" | "textSearch"
      ? string
      : O extends "contains" | "containedBy" | "cs" | "cd"
        ? DeepPartial<T>
        : O extends "overlaps" | "ov"
          ? NonNullable<T> extends readonly unknown[]
            ? NonNullable<T>
            : unknown extends T
              ? readonly unknown[]
              : never
          : T;
```


## Supporting declarations

These types appear in public signatures but are not package exports.

### PredicateOperator


```ts
type PredicateOperator = QueryOperator | "and" | "or" | "not";
```

### Predicate


```ts
interface Predicate {
  field: string;
  op: PredicateOperator;
  value: unknown;
}
```

### Keys


```ts
type Keys<T> = keyof T & string;
```

### JsonRoot


```ts
type JsonRoot<T> = {
  [K in Keys<T>]: NonNullable<T[K]> extends object ? K : never;
}[Keys<T>];
```

### Child


```ts
type Child<T, K extends string> = K extends keyof NonNullable<T>
  ? NonNullable<T>[K]
  : NonNullable<T> extends readonly (infer V)[]
    ? K extends `${number}`
      ? V
      : unknown
    : unknown;
```

### JsonPathValue


```ts
type JsonPathValue<T, P extends string> = P extends `${infer K}->${infer Rest}`
  ? Rest extends `>${string}`
    ? string | null | undefined
    : JsonPathValue<Child<T, K>, Rest>
  : Child<T, P> | undefined;
```
