Código diagnóstico do Bicep - BCP364

Esse diagnóstico ocorre quando o @discriminator() decorador é usado, mas a propriedade discriminadora especificada não é uma string literal exigida em todo tipo de membro de união. A propriedade discriminadora deve ser obrigatória (não opcional) e deve ter um tipo literal de string (não um tipo geral string ) em todos os membros do sindicato.

Descrição

A propriedade "<discriminador-nome-propriedade>" deve ser uma string literal obrigatória em todos os tipos de membros de união.

Nível

Erro

Solutions

Garanta que a propriedade discriminadora:

  • Está presente e é obrigatório (sem ? sufixo) em todos os tipos de membros do sindicato.
  • É tipado como um literal de string (por exemplo, 'foo'), não como um tipo geral string .

Exemplos

O exemplo a seguir eleva o diagnóstico porque a type propriedade está totalmente ausente de FooConfig:

type FooConfig = {
  value: int
}

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

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

Você pode corrigir o diagnóstico adicionando a propriedade literal de string exigida type a todos os tipos de membros da união:

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

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

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

param config ServiceConfig

O exemplo a seguir eleva o diagnóstico porque a type propriedade é opcional (marcada com ?) em FooConfig:

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

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

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

Você pode corrigir o diagnóstico tornando a type propriedade exigida para todos os tipos de membros do sindicato:

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

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

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

param config ServiceConfig

O exemplo a seguir eleva o diagnóstico porque a type propriedade em FooConfig é tipada como um geral string em vez de um literal de cadeia:

type FooConfig = {
  type: string
  value: int
}

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

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

Você pode corrigir o diagnóstico mudando a type propriedade para uma string literal em todos os tipos de membros de união:

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

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

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

param config ServiceConfig

O exemplo a seguir eleva o diagnóstico porque a type propriedade em FooConfig é um literal inteiro e não um literal de cadeia:

type FooConfig = {
  type: 1
  value: int
}

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

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

Você pode corrigir o diagnóstico mudando a type propriedade para uma string literal em todos os tipos de membros de união:

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

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

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

param config ServiceConfig

O exemplo a seguir levanta o diagnóstico porque a type propriedade em FooConfig é uma união de literais de cadeia em vez de um único literal de cadeia:

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

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

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

Você pode corrigir o diagnóstico atribuindo uma única string literal à type propriedade em cada tipo de membro da união:

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

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

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

param config ServiceConfig

Próximas Etapas 

Para obter mais informações sobre o diagnóstico do Bicep, consulte o diagnóstico principal do Bicep.