# Extensions

GraphQL ne traite pas de stratégie spécifique de mise en œuvre des directives, il appartient à chaque implémentation de serveur GraphQL d'exposer une API pour la mise en œuvre des nouvelles directives. Documentation relative aux directives avec Apollo

Vous pouvez assigner les directives grâce aux paramètres via tous les décorateurs d'élément GraphQL (@ObjectType, @InputType, @InterfaceType @Arg, @Field, ...). Cependant si vous voulez assigner les directives de façon commune pour tous les types, ou tout les champs, il est plus pratique de passer par @Directive.

# Utilisation de @Directive

Ceci se fait simplement en passant un name ainsi que des arguments (optionel) au décorateur @Directive

Si vous voulez mettre plusieurs directives sur un élément, vous devrez utiliser plusieurs fois le décorateur

@ObjectType()
@InputType()
@Directive("upper")
@Directive("test", { class: "User" })
class User {
  @ObjectField()
  @InputField()
  @Directive("upper")
  username: string;
}

# Utilisation des directives de façon distincte

Ceci se fait via les paramètres des décorateurs d'éléments:

@ObjectType({
  directives: [
    { name: "upper" }
  ]
})
@InputType({
  directives: [
    {
      name: "upper",
      args: { class: "input-User" }
    }
  ]
})
class User {
  @ObjectField({
    directives: [
      { name: "upper-object" }
    ]
  })
  @InputField({
    directives: [
      { name: "upper-input" }
    ]
  })
  username: string;
}