Skip to content

no-string-discriminator

Id
@azure-tools/typespec-azure-core/no-string-discriminator

Azure 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.

  • Area: SDK

A string discriminator leaves the discriminant values unknown, making SDKs less usable.

  • 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,
}
  • Property is a closed enum
@discriminator("kind")
model Pet {
kind: PetKind;
name: string;
}
union PetKind {
cat: "cat",
dog: "dog",
string,
}

Suppress only when required to match an existing API; otherwise use an open union as the discriminator.