const to pin a field to a single allowed value.
Basic usage
{
"type": "object",
"properties": {
"version": { "const": "v1" }
},
"required": ["version"],
"additionalProperties": false
}
from typing import Literal
from pydantic import BaseModel, ConfigDict
class Payload(BaseModel):
model_config = ConfigDict(extra="forbid")
version: Literal["v1"]
import { z } from "zod";
const payloadSchema = z
.object({
version: z.literal("v1"),
})
.strict();
Discriminator pattern
const is commonly used to tag branches in oneOf/anyOf schemas.
{
"oneOf": [
{
"type": "object",
"properties": {
"action": { "const": "search" },
"query": { "type": "string" }
},
"required": ["action", "query"],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": { "const": "lookup" },
"id": { "type": "integer" }
},
"required": ["action", "id"],
"additionalProperties": false
}
]
}
from typing import Annotated, Literal
from pydantic import BaseModel, ConfigDict, Field
class SearchAction(BaseModel):
model_config = ConfigDict(extra="forbid")
action: Literal["search"]
query: str
class LookupAction(BaseModel):
model_config = ConfigDict(extra="forbid")
action: Literal["lookup"]
id: int
Action = Annotated[SearchAction | LookupAction, Field(discriminator="action")]
import { z } from "zod";
const actionSchema = z.discriminatedUnion("action", [
z
.object({
action: z.literal("search"),
query: z.string(),
})
.strict(),
z
.object({
action: z.literal("lookup"),
id: z.number().int(),
})
.strict(),
]);