Skip to main content

Unions and typed JSON

Complex scalar types can be modelled using a typed JSON fields together with union types, making safe union types.

Typed JSON

It is possible to define explicit types for JSON fields. The generated entity classes and the GraphQL API will respect the type definition of the field, enforcing the data integrity.

Example

type Entity @entity {
a: A
}

type A {
a: String
b: B
c: JSON
}

type B {
a: A
b: String
e: Entity
}

Union types

One can leverage union types supported both by Typescript and GraphQL. The union operator for schema.graphql supports only non-entity types, including typed JSON types described above. JSON types, however, are allowed to reference an entity type.

Example

type User @entity {
id: ID!
login: String!
}

type Farmer {
user: User!
crop: Int
}

type Degen {
user: User!
bag: String
}

union Owner = Farmer | Degen

type NFT @entity {
name: String!
owner: Owner!
}