Código diagnóstico del Bicep - BCP364

Este diagnóstico ocurre cuando se utiliza el @discriminator() decorador pero la propiedad discriminadora especificada no es una cadena obligatoria literal en todos los tipos de miembro de la unión. La propiedad discriminadora debe ser obligatoria (no opcional) y debe tener un tipo literal de cadena (no un tipo general string ) en todos los miembros del sindicato.

Description

La propiedad "<discriminador-nombre-propiedad>" debe ser una cadena literal obligatoria en todos los tipos de miembros de la unión.

Nivel

Error

Soluciones

Asegura que la propiedad del discriminador:

  • Está presente y es obligatorio (sin ? sufijo) en todos los tipos de miembros sindicales.
  • Se tipifica como un literal de cadena (por ejemplo, 'foo'), no como un tipo general string .

Ejemplos

El siguiente ejemplo eleva el diagnóstico porque la type propiedad falta por completo de FooConfig:

type FooConfig = {
  value: int
}

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

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

Puedes arreglar el diagnóstico añadiendo la propiedad literal de cadena requerida type a todos los tipos de miembros de la unión:

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

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

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

param config ServiceConfig

El siguiente ejemplo eleva el diagnóstico porque la type propiedad es opcional (marcada con ?) en FooConfig:

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

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

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

Puedes arreglar el diagnóstico estableciendo la type propiedad requerida para todos los tipos de miembros sindicales:

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

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

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

param config ServiceConfig

El siguiente ejemplo eleva el diagnóstico porque la type propiedad en FooConfig se tipa como general string en lugar de literal de cadena:

type FooConfig = {
  type: string
  value: int
}

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

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

Puedes arreglar el diagnóstico cambiando la type propiedad a una cadena literal en todos los tipos de miembros de la unión:

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

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

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

param config ServiceConfig

El siguiente ejemplo plantea el diagnóstico porque la type propiedad en FooConfig es un literal entero en lugar de un literal de cadena:

type FooConfig = {
  type: 1
  value: int
}

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

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

Puedes arreglar el diagnóstico cambiando la type propiedad a una cadena literal en todos los tipos de miembros de la unión:

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

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

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

param config ServiceConfig

El siguiente ejemplo plantea el diagnóstico porque la type propiedad sobre FooConfig es una unión de literales de cadena en lugar de un solo literal de cadena:

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

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

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

Puedes arreglar el diagnóstico asignando una única cadena literal a la type propiedad de cada tipo de miembro de la unión:

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

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

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

param config ServiceConfig

Pasos siguientes

Para obtener más información sobre los diagnósticos de Bicep, consulte Diagnósticos principales de Bicep.