VOOZH about

URL: https://www.geeksforgeeks.org/graphql/graphql-type-system/

⇱ GraphQL Type System - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

GraphQL Type System

Last Updated : 8 Apr, 2026

The GraphQL type system defines the structure and capabilities of a GraphQL server by specifying data types and schema. It ensures valid queries and acts as a contract between the client and server.

  • Defines data types and schema, acting as a contract between client and server.
  • Specifies allowed queries and operations that can be performed.
  • Ensures query validation and structured interaction with the server.

Different Types of Type System

GraphQL provides various types to define data structure, operations, and constraints within a schema.

1. Scalar Type

These types are primitive data types. These data types tend to store only a single value. GraphQL offers various default scalar types:

  • Int: Signed 32-bit Integer.
  • Float: Signed number with values in integer and decimal form.
  • String: UTF - 8-character sequence.
  • Boolean: True or false.
  • ID: It is a unique identifier that is particularly used for identifying an item or object.

Syntax:

scalar Int
scalar Float
scalar String
scalar Boolean
scalar ID

Example: Define a Post type that includes a title and content, both of which are strings.

type Post {
 id: ID!
 title: String!
 content: String!
 createdAt: DateTime!
} 

2. Object Type

Object type represents a structured group of related fields in a GraphQL schema.

  • It is regarded as the most common type of data type which is used in a schema.
  • It allow users to represent a group of fields as a whole. It also supports the nested type features in this data type.

Syntax:

type Person {
 id: ID!
 name: String!
 age: Int!
 address: Address!
}

Example: To store the basic structure for storing employee information in a GraphQL schema.

To define an object type

 type Employee { 
 emp_id:ID 
 firstname: String 
 age: Int 
 salary:Float 
} 

To define a GraphQL schema

type Query 
{ 
 emp_details:[Employee] 
} 

3. Query Type

Query type defines the entry points for fetching data from the server.

  • These data types are used to define the entry points for retrieving the data.
  • It is among the top root-level types in GraphQL. Basically it is a request which is sent from the client to the server.

Syntax:

type Query { 
person(id: ID!): Person 
allPersons: [Person!]!
}

Example: Greet message from the server in a GraphQL query.

type Query {
 greeting: String
}

4. Mutation Type

Mutation type defines the entry points for modifying data in the server.

  • It is one of the root-level types in GraphQL.
  • It is used to perform data manipulation operations.
  • It handles actions like create, update, and delete data.

Syntax:

type Mutation { 
createPerson(name: String!, age: Int!): Person! 
updatePerson(id: ID!, name: String, age: Int): Person 
deletePerson(id: ID!): Boolean 
}

Example: To add a new employee to the system.

type Mutation { 
 addEmployee(firstName: String, lastName: String): Employee 
} 

5. Enum Type

Enum type represents a fixed set of predefined values in the GraphQL type system.

  • It is used to represent leaf values in a schema.
  • It is preferred when there is a list of predefined options.
  • It is similar to scalar types but with restricted values.

Syntax:

type enum_name{
val_1
val_2
}

Example:

type Days_of_Week{ 
 SUNDAY 
 MONDAY 
 TUESDAY 
 WEDNESDAY 
 THURSDAY 
 FRIDAY 
 SATURDAY 
} 

6. List Type

List type represents a collection of multiple values of the same type in GraphQL.

  • It is used to handle arrays of a particular data type.
  • It wraps similar objects, scalars, or enums using type modifiers.
  • It allows grouping multiple values into a single field.

Syntax:

field:[data_type]

Example: Returns a list of strings, representing a to-do list.

type Query { 
 todo: [String] 
} 

7. Non-Nullable Type

Non-nullable type ensures that a field must always return a value and cannot be null.

  • It guarantees a value of the specified type is returned.
  • It does not allow null values for that field.
  • It is defined using an exclamation mark (!) after the type.

Syntax:

field:data_type!

Example: Define the field for the employee where the employee if can't be NULL.

type Employee { 
 emp_id:ID! 
 firstName:String 
 lastName:String 
} 
Comment