Codice diagnostico Bicep - BCP364

Questa diagnostica avviene quando viene utilizzato il @discriminator() decorator ma la proprietà discriminatrice specificata non è una stringa obbligatoria letterale su ogni tipo di membro unionista. La proprietà discriminatoria deve essere richiesta (non opzionale) e deve avere un tipo di letterale di stringa (non un tipo generale string ) su tutti i membri del sindacato.

Description

La proprietà "<discriminatore-property-name>" deve essere una stringa letterale obbligatoria su tutti i tipi di membri union.

Level

Error

Solutions

Assicurati che la proprietà discriminatrice:

  • È presente e obbligatorio (senza ? suffisso) su tutti i tipi di membri sindacali.
  • Viene tipizzato come letterale di stringa (ad esempio, 'foo'), non come tipo generale string .

Examples

Il seguente esempio solleva la diagnostica perché la type proprietà manca completamente da FooConfig:

type FooConfig = {
  value: int
}

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

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

Puoi risolvere la diagnostica aggiungendo la proprietà letterale della stringa richiesta type a tutti i tipi di membri union:

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

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

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

param config ServiceConfig

Il seguente esempio solleva la diagnostica perché la type proprietà è opzionale (contrassegnata con ?) su FooConfig:

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

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

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

Puoi risolvere la diagnosi rendendo la type proprietà richiesta per tutti i tipi di membri sindacali:

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

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

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

param config ServiceConfig

Il seguente esempio solleva la diagnostica perché la type proprietà su FooConfig è tipizzata come un generale string piuttosto che come un letterale di stringa:

type FooConfig = {
  type: string
  value: int
}

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

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

Puoi risolvere la diagnostica cambiando la type proprietà in una stringa letterale su tutti i tipi di membri union:

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

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

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

param config ServiceConfig

Il seguente esempio solleva la diagnostica perché la type proprietà su FooConfig è un letterale intero piuttosto che un letterale di stringa:

type FooConfig = {
  type: 1
  value: int
}

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

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

Puoi risolvere la diagnostica cambiando la type proprietà in una stringa letterale su tutti i tipi di membri union:

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

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

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

param config ServiceConfig

Il seguente esempio solleva la diagnostica perché la type proprietà su FooConfig è un'unione di letterali di stringa piuttosto che un singolo letterale di stringa:

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

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

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

Puoi risolvere la diagnostica assegnando una singola stringa letterale alla type proprietà su ogni tipo di membro unionista:

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

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

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

param config ServiceConfig

Passaggi successivi

Per altre informazioni sulla diagnostica Bicep, vedere Diagnostica dei core Bicep.