Skip to main content
Version: Next 🚧

Decorators

TypeSpec.JsonSchema

@baseUri

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

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

Target

Namespace

Parameters

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

@contains

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)

Target

unknown[] | ModelProperty

Parameters

NameTypeDescription
valueunknownThe type the array must contain.

@contentEncoding

Specify the encoding used for the contents of a string.

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

Target

string | ModelProperty

Parameters

NameTypeDescription
valuevalueof string

@contentMediaType

Specify the content type of content stored in a string.

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

Target

string | ModelProperty

Parameters

NameTypeDescription
valuevalueof stringthe media type of the string contents

@contentSchema

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)

Target

string | ModelProperty

Parameters

NameTypeDescription
valueunknownthe schema of the string contents

@extension

Specify a custom property to add to the emitted schema. 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:

  1. The value is a scalar value (e.g. string, number, boolean, etc.)
  2. The value is wrapped in the Json<Data> template
  3. 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)

Target

unknown

Parameters

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

@id

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)

Target

unknown

Parameters

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

@jsonSchema

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)

Target

unknown

Parameters

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

@maxContains

Specify that the array must contain at most some number of the types provided by the contains decorator.

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

Target

unknown[] | ModelProperty

Parameters

NameTypeDescription
valuevalueof int32The maximum number of instances the array must contain

@maxProperties

Specify the maximum number of properties this object can have.

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

Target

Record<unknown> | ModelProperty

Parameters

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

@minContains

Specify that the array must contain at least some number of the types provided by the contains decorator.

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

Target

unknown[] | ModelProperty

Parameters

NameTypeDescription
valuevalueof int32The minimum number of instances the array must contain

@minProperties

Specify the minimum number of properties this object can have.

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

Target

Record<unknown> | ModelProperty

Parameters

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

@multipleOf

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

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

Target

numeric | ModelProperty

Parameters

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

@oneOf

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

@TypeSpec.JsonSchema.oneOf

Target

Union | ModelProperty

Parameters

None

@prefixItems

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

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

Target

unknown[] | ModelProperty

Parameters

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

@uniqueItems

Specify that every item in the array must be unique.

@TypeSpec.JsonSchema.uniqueItems

Target

unknown[] | ModelProperty

Parameters

None