[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:15916](https://github.com/evoluhq/evolu/blob/dd96d79f1dbe9a49fa12ce8e0aa7d3d0177795ca/packages/common/src/Type.ts#L15916)

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<IsData<User>, true>();
assertType<IsData<Service>, false>();
```