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

```ts
type IsData<Value> = IsDataValue<Value, readonly []>;
```

Defined in: [packages/common/src/Type.ts:13158](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Type.ts#L13158)

Returns whether a TypeScript type consists only of [Data](https://evolu.dev/docs/api-reference/common/Type/variables/Data).

Unlike `Value extends Data`, this recursively checks the declared properties
of object types, so ordinary interfaces do not need a string index signature.
This is a compile-time approximation of the Data domain; representation
details such as prototypes and property descriptors still require the runtime
[Data](https://evolu.dev/docs/api-reference/common/Type/variables/Data) Type.

Recursive object types are supported.

### Example

```ts

interface User {
  readonly name: string;
  readonly roles: ReadonlySet<string>;
}

interface Service {
  readonly run: () => void;
}

assertType<true, IsData<User>>();
assertType<false, IsData<Service>>();
```