no-string-discriminator
@azure-tools/typespec-azure-core/no-string-discriminatorAzure services discriminated models should define the discriminated property as an extensible union.
Azure services favor using an extensible union to define the discriminator property. This allow the service to add new discriminated models without being breaking.
Impact
Section titled “Impact”- Area: SDK
A string discriminator leaves the discriminant values unknown, making SDKs less usable.
❌ Incorrect
Section titled “❌ Incorrect”- Missing explicit property
@discriminator("kind")model Pet { name: string;}- Property is a string
@discriminator("kind")model Pet { kind: string; name: string;}- Property is a closed enum
@discriminator("kind")model Pet { kind: PetKind; name: string;}enum PetKind { cat, dog,}✅ Correct
Section titled “✅ Correct”- Property is a closed enum
@discriminator("kind")model Pet { kind: PetKind; name: string;}union PetKind { cat: "cat", dog: "dog", string,}Suppression
Section titled “Suppression”Suppress only when required to match an existing API; otherwise use an open union as the discriminator.