Code de diagnostic du Bicep - BCP364

Ce diagnostic se produit lorsque le @discriminator() décorateur est utilisé mais que la propriété discriminatoire spécifiée n’est pas une chaîne littérale obligatoire sur chaque type de membre syndical. La propriété discriminatoire doit être obligatoire (non optionnelle) et doit avoir un type de type littéral de chaîne (et non un type général string ) sur tous les membres du syndicat.

Description

La propriété «< discriminator-property-name> » doit être une chaîne littérale obligatoire sur tous les types de membres de l’union.

Level

Error

Solutions

Assurez-vous que la propriété discriminatrice :

  • Est présent et obligatoire (sans ? suffixe) sur tous les types de membres syndicaux.
  • Est typé comme un littéral de chaîne (par exemple, 'foo'), et non comme un type général string .

Exemples

L’exemple suivant élève le diagnostic car la type propriété est totalement absente de FooConfig:

type FooConfig = {
  value: int
}

type BarConfig = {
  type: 'bar'
  value: bool
}

@discriminator('type')
type ServiceConfig = FooConfig | BarConfig

Vous pouvez corriger le diagnostic en ajoutant la propriété littérale de chaîne requise type à tous les types de membres de l’union :

type FooConfig = {
  type: 'foo'
  value: int
}

type BarConfig = {
  type: 'bar'
  value: bool
}

@discriminator('type')
type ServiceConfig = FooConfig | BarConfig

param config ServiceConfig

L’exemple suivant élève le diagnostic car la type propriété est optionnelle (marquée par ?) sur FooConfig:

type FooConfig = {
  type?: 'foo'
  value: int
}

type BarConfig = {
  type: 'bar'
  value: bool
}

@discriminator('type')
type ServiceConfig = FooConfig | BarConfig

Vous pouvez corriger le diagnostic en indiquant que les type biens requis pour tous les types de membres du syndicat :

type FooConfig = {
  type: 'foo'
  value: int
}

type BarConfig = {
  type: 'bar'
  value: bool
}

@discriminator('type')
type ServiceConfig = FooConfig | BarConfig

param config ServiceConfig

L’exemple suivant élève le diagnostic car la type propriété sur FooConfig est typée comme un général string plutôt qu’un littéral de chaîne :

type FooConfig = {
  type: string
  value: int
}

type BarConfig = {
  type: 'bar'
  value: bool
}

@discriminator('type')
type ServiceConfig = FooConfig | BarConfig

Vous pouvez corriger le diagnostic en changeant la type propriété par une chaîne littérale sur tous les types de membres de l’union :

type FooConfig = {
  type: 'foo'
  value: int
}

type BarConfig = {
  type: 'bar'
  value: bool
}

@discriminator('type')
type ServiceConfig = FooConfig | BarConfig

param config ServiceConfig

L’exemple suivant élève le diagnostic car la type propriété sur FooConfig est un littéral entier plutôt qu’un littéral de chaîne :

type FooConfig = {
  type: 1
  value: int
}

type BarConfig = {
  type: 'bar'
  value: bool
}

@discriminator('type')
type ServiceConfig = FooConfig | BarConfig

Vous pouvez corriger le diagnostic en changeant la type propriété par une chaîne littérale sur tous les types de membres de l’union :

type FooConfig = {
  type: 'foo'
  value: int
}

type BarConfig = {
  type: 'bar'
  value: bool
}

@discriminator('type')
type ServiceConfig = FooConfig | BarConfig

param config ServiceConfig

L’exemple suivant soulève le diagnostic car la type propriété sur FooConfig est une union de littéraux de chaîne plutôt qu’un seul littéral de chaîne :

type FooConfig = {
  type: 'foo' | 'baz'
  value: int
}

type BarConfig = {
  type: 'bar'
  value: bool
}

@discriminator('type')
type ServiceConfig = FooConfig | BarConfig

Vous pouvez corriger le diagnostic en attribuant une seule chaîne littérale à la type propriété sur chaque type de membre de l’union :

type FooConfig = {
  type: 'foo'
  value: int
}

type BarConfig = {
  type: 'bar'
  value: bool
}

@discriminator('type')
type ServiceConfig = FooConfig | BarConfig

param config ServiceConfig

Étapes suivantes

Pour plus d’informations sur les diagnostics Bicep, consultez diagnostics principaux Bicep.