# ObjectType
Un ObjectType
correspond à la déclaration: type
avec GraphQL (en SDL)
@ObjectType()
class User {
@Field()
email: string;
@Field()
username: string;
}
Donnera en SDL:
type User {
email: String
username: String
}
# Paramètres
@ObjectType
a plusieurs signatures disponibles permettant de paramétrer votre objet:
# name
Indique le nom du type compilé en SDL.
@ObjectType("UserType")
class User {
Field()
username: string;
}
Donnera en SDL:
type UserType {
username: String;
}
# params
Un objet acceptant plusieurs paramètres:
Propriété | description | type |
---|---|---|
hidden | La classe ne sera pas compilée et n'apparaîtra pas dans le schéma (utile pour les types génériques), une classe abstraite est en principe hidden | boolean |
nullable | Tous les champs du type seront nullable | boolean |
required | Tous les champs du type seront requis | boolean |
implements | Implémente une interface (GraphQL) | (ClassType | InterfaceType)[] (Une class ou une interface déclarée avec graphql-composer )[] |
description | La description du type | string |
extensions | Les extensions (métadonnées) du type | any |
directives | Les directives du type | {name: string, args: KeyValue}[] |
extends | Appliquer l'héritage de façon forcé | (ClassType | ObjectType | InterfaceType | InputType)[] (Une class ou un type déclaré avec graphql-composer )[] |
# @ObjectField
Le décorateur @ObjectField
va indiquer les paramètres du champ seulement pour @ObjectType
.
Ceci est utile lorsque vous utiliser une class en tant que que plusieurs types GraphQL (type
, input
ou/et interface
), en la décorant simultanément de @ObjectType
et @InputType
par exemple.
Car @Field
paramètre le champ pour tous les types GraphQL dont la class est décorée.
@ObjectField
override les paramètres de@Field
.
@ObjectType()
@InputType("UserInput")
class User {
@Field(type => R(String))
@ObjectField()
username: string;
@InputField(type => R(String))
@ObjectField()
name: string;
@Field()
email: string;
@InputField()
password: string;
}
Donnera en SDL:
type User {
username: String;
name: String;
email: String;
}
input UserInput {
username: String!;
name: String!;
email: String;
password: String;
}
# Resolvable field
Avec GraphQL un champ d'un type peut accepter des arguments et une fonction retournant une valeur. Comme ce type par exemple:
type User {
birthdate(format: String!): String!
}
Pour faire ceci, il vous suffit d'implémenter une méthode décorée de @Field
dans votre class.
@ObjectType()
class User {
@Field()
// or @ObjectField()
birthDate(@Arg("birthdate") birthdate: string): string {
// ...
}
}
# Les middlewares
L'utilisation des middlewares sur l'ensemble de la class et sur les champs est possible.