# InterfaceType
Un InterfaceType correspond à la déclaration: interface avec GraphQL (en SDL)
@InterfaceType()
class User {
@Field()
email: string;
@Field()
username: string;
}
Donnera en SDL:
interface User {
email: String
username: String
}
# Paramètres
@InterfaceType a plusieurs signatures disponibles permettant de paramétrer votre objet:
# name
Indique le nom du type compilé en SDL.
# 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 |
| typeResolver | Fonction déterminant la valeur de __typename | GraphQLTypeResolver |
| 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)[] |
# @InterfaceField
Le décorateur @InterfaceField va indiquer les paramètres du champ seulement pour @InterfaceType.
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 @InterfaceType et @InputType par exemple.
Car @Field paramètre le champ pour tous les types GraphQL dont la class est décorée.
@InterfaceFieldoverride les paramètres de@Field.
@InterfaceField()
@InputType("UserInput")
class User {
@Field(type => R(String))
@InterfaceField()
username: string;
@InputField(type => R(String))
@InterfaceField()
name: string;
@Field()
email: string;
@InputField()
password: string;
}
Donnera en SDL:
interface User {
username: String;
name: String;
email: String;
}
input UserInput {
username: String!;
name: String!;
email: String;
password: String;
}
# La fonction de TypeResolver (__typename)
Par défaut une fonction fonctionnant avec tous les types est écrite par graphql-composer, vous n'avez donc, pour de nombreux cas, pas besoin de donner une valeur à params.typeResolver.
La fonction par défaut détermine le type via les propriétés de l'objet, mais de façon générale pour n'importe quel objet. Ceci s'applique également pour les
UnionType. Une fonctionGraphQLTypeResolver` peut ressembler à ça (dans un cas spécifique):
function typeResolver = (obj, context, info) => {
if(obj.name){
return "Author";
}
if(obj.title){
return "Book";
}
return null;
}
@InterfaceType({
typeResolver
})
class User {
Field()
username: string;
}
← InputType Union type →