Skip to content

Decorators

Set the base URI for any schemas emitted from types within this namespace.

@TypeSpec.JsonSchema.baseUri(baseUri: valueof string)

Namespace

NameTypeDescription
baseUrivalueof stringThe base URI. Schema IDs inside this namespace are relative to this URI.

Specify that the array must contain at least one instance of the provided type. Use @minContains and @maxContains to customize how many instances to expect.

@TypeSpec.JsonSchema.contains(value: unknown)

unknown[] | ModelProperty

NameTypeDescription
valueunknownThe type the array must contain.

Specify the encoding used for the contents of a string.

@TypeSpec.JsonSchema.contentEncoding(value: valueof string)

string | ModelProperty

NameTypeDescription
valuevalueof string

Specify the content type of content stored in a string.

@TypeSpec.JsonSchema.contentMediaType(value: valueof string)

string | ModelProperty

NameTypeDescription
valuevalueof stringThe media type of the string contents

Specify the schema for the contents of a string when interpreted according to the content’s media type and encoding.

@TypeSpec.JsonSchema.contentSchema(value: unknown)

string | ModelProperty

NameTypeDescription
valueunknownThe schema of the string contents

Specify a custom property to add to the emitted schema. This is useful for adding custom keywords and other vendor-specific extensions. Scalar values need to be specified using typeof to be converted to a schema.

For example, @extension("x-schema", typeof "foo") will emit a JSON schema value for x-schema, whereas @extension("x-schema", "foo") will emit the raw code "foo".

The value will be treated as a raw value if any of the following are true:

  • The value is a scalar value (e.g. string, number, boolean, etc.)
  • The value is wrapped in the Json<Data> template
  • The value is provided using the value syntax (e.g. #{}, #[])

For example, @extension("x-schema", { x: "value" }) will emit a JSON schema value for x-schema, whereas @extension("x-schema", #{x: "value"}) and @extension("x-schema", Json<{x: "value"}>) will emit the raw JSON code {x: "value"}.

@TypeSpec.JsonSchema.extension(key: valueof string, value: unknown | valueof unknown)

unknown

NameTypeDescription
keyvalueof stringThe name of the keyword of vendor extension, e.g. x-custom.
valueunknown | valueof unknownThe value of the keyword.

Specify the JSON Schema id. If this model or a parent namespace has a base URI, the provided ID will be relative to that base URI.

By default, the id will be constructed based on the declaration’s name.

@TypeSpec.JsonSchema.id(id: valueof string)

unknown

NameTypeDescription
idvalueof stringThe id of the JSON schema for this declaration.

Add to namespaces to emit models within that namespace to JSON schema. Add to another declaration to emit that declaration to JSON schema.

Optionally, for namespaces, you can provide a baseUri, and for other declarations, you can provide the id.

@TypeSpec.JsonSchema.jsonSchema(baseUri?: valueof string)

unknown

NameTypeDescription
baseUrivalueof stringSchema IDs are interpreted as relative to this URI.

Used in conjunction with the @contains decorator, specifies that the array must contain at most a certain number of the types provided by the @contains decorator.

@TypeSpec.JsonSchema.maxContains(value: valueof int32)

unknown[] | ModelProperty

NameTypeDescription
valuevalueof int32The maximum number of instances the array must contain

Specify the maximum number of properties this object can have.

@TypeSpec.JsonSchema.maxProperties(value: valueof int32)

Record<unknown> | ModelProperty

NameTypeDescription
valuevalueof int32The maximum number of properties this object can have.

Used in conjunction with the @contains decorator, specifies that the array must contain at least a certain number of the types provided by the @contains decorator.

@TypeSpec.JsonSchema.minContains(value: valueof int32)

unknown[] | ModelProperty

NameTypeDescription
valuevalueof int32The minimum number of instances the array must contain

Specify the minimum number of properties this object can have.

@TypeSpec.JsonSchema.minProperties(value: valueof int32)

Record<unknown> | ModelProperty

NameTypeDescription
valuevalueof int32The minimum number of properties this object can have.

Specify that the numeric type must be a multiple of some numeric value.

@TypeSpec.JsonSchema.multipleOf(value: valueof numeric)

numeric | ModelProperty

NameTypeDescription
valuevalueof numericThe numeric type must be a multiple of this value.

Specify that oneOf should be used instead of anyOf for that union.

@TypeSpec.JsonSchema.oneOf

Union | ModelProperty

None

Specify that the target array must begin with the provided types.

@TypeSpec.JsonSchema.prefixItems(value: unknown[])

unknown[] | ModelProperty

NameTypeDescription
valueunknown[]A tuple containing the types that must be present at the start of the array

Specify that every item in the array must be unique.

@TypeSpec.JsonSchema.uniqueItems

unknown[] | ModelProperty

None