Built-in Decorators
TypeSpec
Section titled “TypeSpec”@continuationToken
Section titled “@continuationToken”Pagination property defining the token to get to the next page. It MUST be specified both on the request parameter and the response.
@continuationToken
Target
Section titled “Target”ModelProperty
Parameters
Section titled “Parameters”None
Examples
Section titled “Examples”model Page<T> { @pageItems items: T[]; @continuationToken continuationToken: string;}@list op listPets(@continuationToken continuationToken: string): Page<Pet>;
@defaultVisibility
Section titled “@defaultVisibility”Declares the default visibility modifiers for a visibility class.
The default modifiers are used when a property does not have any visibility decorators applied to it.
The modifiers passed to this decorator MUST be members of the target Enum.
@defaultVisibility(...visibilities: valueof EnumMember[])
Target
Section titled “Target”Enum
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
visibilities | valueof EnumMember[] | the list of modifiers to use as the default visibility modifiers. |
@discriminated
Section titled “@discriminated”Specify that this union is discriminated.
@discriminated(options?: valueof DiscriminatedOptions)
Target
Section titled “Target”Union
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
options | valueof DiscriminatedOptions | Options to configure the serialization of the discriminated union. |
Examples
Section titled “Examples”@discriminatedunion Pet{ cat: Cat, dog: Dog }
model Cat { name: string, meow: boolean }model Dog { name: string, bark: boolean }
Serialized as:
{ "kind": "cat", "value": { "name": "Whiskers", "meow": true }},{ "kind": "dog", "value": { "name": "Rex", "bark": false }}
Custom property names
Section titled “Custom property names”@discriminated(#{discriminatorPropertyName: "dataKind", envelopePropertyName: "data"})union Pet{ cat: Cat, dog: Dog }
model Cat { name: string, meow: boolean }model Dog { name: string, bark: boolean }
Serialized as:
{ "dataKind": "cat", "data": { "name": "Whiskers", "meow": true }},{ "dataKind": "dog", "data": { "name": "Rex", "bark": false }}
@discriminator
Section titled “@discriminator”Specify the property to be used to discriminate this type.
@discriminator(propertyName: valueof string)
Target
Section titled “Target”Model
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
propertyName | valueof string | The property name to use for discrimination |
Examples
Section titled “Examples”@discriminator("kind")model Pet{ kind: string }
model Cat extends Pet {kind: "cat", meow: boolean}model Dog extends Pet {kind: "dog", bark: boolean}
Attach a documentation string. Content support CommonMark markdown formatting.
@doc(doc: valueof string, formatArgs?: {})
Target
Section titled “Target”unknown
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
doc | valueof string | Documentation string |
formatArgs | {} | Record with key value pair that can be interpolated in the doc. |
Examples
Section titled “Examples”@doc("Represent a Pet available in the PetStore")model Pet {}
@encode
Section titled “@encode”Specify how to encode the target type.
@encode(encodingOrEncodeAs: Scalar | valueof string | EnumMember, encodedAs?: Scalar)
Target
Section titled “Target”Scalar | ModelProperty
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
encodingOrEncodeAs | Scalar | valueof string | EnumMember | Known name of an encoding or a scalar type to encode as(Only for numeric types to encode as string). |
encodedAs | Scalar | What target type is this being encoded as. Default to string. |
Examples
Section titled “Examples”offsetDateTime encoded with rfc7231
Section titled “offsetDateTime encoded with rfc7231”@encode("rfc7231")scalar myDateTime extends offsetDateTime;
utcDateTime encoded with unixTimestamp
Section titled “utcDateTime encoded with unixTimestamp”@encode("unixTimestamp", int32)scalar myDateTime extends unixTimestamp;
encode numeric type to string
Section titled “encode numeric type to string”model Pet { @encode(string) id: int64;}
@encodedName
Section titled “@encodedName”Provide an alternative name for this type when serialized to the given mime type.
@encodedName(mimeType: valueof string, name: valueof string)
Target
Section titled “Target”unknown
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
mimeType | valueof string | Mime type this should apply to. The mime type should be a known mime type as described here https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types without any suffix (e.g. +json ) |
name | valueof string | Alternative name |
Examples
Section titled “Examples”model Certificate { @encodedName("application/json", "exp") @encodedName("application/xml", "expiry") expireAt: int32;}
Invalid values
Section titled “Invalid values”@encodedName("application/merge-patch+json", "exp") ^ error cannot use subtype
@error
Section titled “@error”Specify that this model is an error type. Operations return error types when the operation has failed.
@error
Target
Section titled “Target”Model
Parameters
Section titled “Parameters”None
Examples
Section titled “Examples”@errormodel PetStoreError { code: string; message: string;}
@errorsDoc
Section titled “@errorsDoc”Attach a documentation string to describe the error return types of an operation.
If an operation returns a union of success and errors it only describes the errors. See @returnsDoc
for success documentation.
@errorsDoc(doc: valueof string)
Target
Section titled “Target”Operation
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
doc | valueof string | Documentation string |
Examples
Section titled “Examples”@errorsDoc("Errors doc")op get(): Pet | NotFound;
@example
Section titled “@example”Provide an example value for a data type.
@example(example: valueof unknown, options?: valueof ExampleOptions)
Target
Section titled “Target”Model | Enum | Scalar | Union | ModelProperty | UnionVariant
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
example | valueof unknown | Example value. |
options | valueof ExampleOptions | Optional metadata for the example. |
Examples
Section titled “Examples”@example(#{name: "Fluffy", age: 2})model Pet { name: string; age: int32;}
@firstLink
Section titled “@firstLink”Pagination property defining a link to the first page.
It is expected that navigating to the link will return the same set of responses as the operation that returned the current page.
@firstLink
Target
Section titled “Target”ModelProperty
Parameters
Section titled “Parameters”None
Examples
Section titled “Examples”model Page<T> { @pageItems items: T[]; @nextLink next: url; @prevLink prev: url; @firstLink first: url; @lastLink last: url;}@list op listPets(): Page<Pet>;
@format
Section titled “@format”Specify a known data format hint for this string type. For example uuid
, uri
, etc.
This differs from the @pattern
decorator which is meant to specify a regular expression while @format
accepts a known format name.
The format names are open ended and are left to emitter to interpret.
@format(format: valueof string)
Target
Section titled “Target”string | ModelProperty
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
format | valueof string | format name. |
Examples
Section titled “Examples”@format("uuid")scalar uuid extends string;
@friendlyName
Section titled “@friendlyName”Specifies how a templated type should name their instances.
@friendlyName(name: valueof string, formatArgs?: unknown)
Target
Section titled “Target”unknown
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
name | valueof string | name the template instance should take |
formatArgs | unknown | Model with key value used to interpolate the name |
Examples
Section titled “Examples”@friendlyName("{name}List", T)model List<Item> { value: Item[]; nextLink: string;}
@inspectType
Section titled “@inspectType”A debugging decorator used to inspect a type.
@inspectType(text: valueof string)
Target
Section titled “Target”unknown
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
text | valueof string | Custom text to log |
@inspectTypeName
Section titled “@inspectTypeName”A debugging decorator used to inspect a type name.
@inspectTypeName(text: valueof string)
Target
Section titled “Target”unknown
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
text | valueof string | Custom text to log |
@invisible
Section titled “@invisible”Indicates that a property is not visible in the given visibility class.
This decorator removes all active visibility modifiers from the property within the given visibility class, making it invisible to any context that selects for visibility modifiers within that class.
@invisible(visibilityClass: Enum)
Target
Section titled “Target”ModelProperty
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
visibilityClass | Enum | The visibility class to make the property invisible within. |
Examples
Section titled “Examples”model Example { @invisible(Lifecycle) hidden_property: string;}
Mark a model property as the key to identify instances of that type
@key(altName?: valueof string)
Target
Section titled “Target”ModelProperty
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
altName | valueof string | Name of the property. If not specified, the decorated property name is used. |
Examples
Section titled “Examples”model Pet { @key id: string;}
@lastLink
Section titled “@lastLink”Pagination property defining a link to the last page.
It is expected that navigating to the link will return the same set of responses as the operation that returned the current page.
@lastLink
Target
Section titled “Target”ModelProperty
Parameters
Section titled “Parameters”None
Examples
Section titled “Examples”model Page<T> { @pageItems items: T[]; @nextLink next: url; @prevLink prev: url; @firstLink first: url; @lastLink last: url;}@list op listPets(): Page<Pet>;
Mark this operation as a list
operation that returns a paginated list of items.
@list
Target
Section titled “Target”Operation
Parameters
Section titled “Parameters”None
@maxItems
Section titled “@maxItems”Specify the maximum number of items this array should have.
@maxItems(value: valueof integer)
Target
Section titled “Target”unknown[] | ModelProperty
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
value | valueof integer | Maximum number |
Examples
Section titled “Examples”@maxItems(5)model Endpoints is string[];
@maxLength
Section titled “@maxLength”Specify the maximum length this string type should be.
@maxLength(value: valueof integer)
Target
Section titled “Target”string | ModelProperty
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
value | valueof integer | Maximum length |
Examples
Section titled “Examples”@maxLength(20)scalar Username extends string;
@maxValue
Section titled “@maxValue”Specify the maximum value this numeric type should be.
@maxValue(value: valueof numeric)
Target
Section titled “Target”numeric | ModelProperty
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
value | valueof numeric | Maximum value |
Examples
Section titled “Examples”@maxValue(200)scalar Age is int32;
@maxValueExclusive
Section titled “@maxValueExclusive”Specify the maximum value this numeric type should be, exclusive of the given value.
@maxValueExclusive(value: valueof numeric)
Target
Section titled “Target”numeric | ModelProperty
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
value | valueof numeric | Maximum value |
Examples
Section titled “Examples”@maxValueExclusive(50)scalar distance is float64;
@mediaTypeHint
Section titled “@mediaTypeHint”Applies a media type hint to a TypeSpec type. Emitters and libraries may choose to use this hint to determine how a
type should be serialized. For example, the @typespec/http
library will use the media type hint of the response
body type as a default Content-Type
if one is not explicitly specified in the operation.
Media types (also known as MIME types) are defined by RFC 6838. The media type hint should be a valid media type string as defined by the RFC, but the decorator does not enforce or validate this constraint.
Notes: the applied media type is only a hint. It may be overridden or not used at all. Media type hints are
inherited by subtypes. If a media type hint is applied to a model, it will be inherited by all other models that
extend
it unless they delcare their own media type hint.
@mediaTypeHint(mediaType: valueof string)
Target
Section titled “Target”Model | Scalar | Enum | Union
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
mediaType | valueof string | The media type hint to apply to the target type. |
Examples
Section titled “Examples”create a model that serializes as XML by default
Section titled “create a model that serializes as XML by default”@mediaTypeHint("application/xml")model Example { @visibility(Lifecycle.Read) id: string;
name: string;}
@minItems
Section titled “@minItems”Specify the minimum number of items this array should have.
@minItems(value: valueof integer)
Target
Section titled “Target”unknown[] | ModelProperty
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
value | valueof integer | Minimum number |
Examples
Section titled “Examples”@minItems(1)model Endpoints is string[];
@minLength
Section titled “@minLength”Specify the minimum length this string type should be.
@minLength(value: valueof integer)
Target
Section titled “Target”string | ModelProperty
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
value | valueof integer | Minimum length |
Examples
Section titled “Examples”@minLength(2)scalar Username extends string;
@minValue
Section titled “@minValue”Specify the minimum value this numeric type should be.
@minValue(value: valueof numeric)
Target
Section titled “Target”numeric | ModelProperty
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
value | valueof numeric | Minimum value |
Examples
Section titled “Examples”@minValue(18)scalar Age is int32;
@minValueExclusive
Section titled “@minValueExclusive”Specify the minimum value this numeric type should be, exclusive of the given value.
@minValueExclusive(value: valueof numeric)
Target
Section titled “Target”numeric | ModelProperty
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
value | valueof numeric | Minimum value |
Examples
Section titled “Examples”@minValueExclusive(0)scalar distance is float64;
@nextLink
Section titled “@nextLink”Pagination property defining a link to the next page.
It is expected that navigating to the link will return the same set of responses as the operation that returned the current page.
@nextLink
Target
Section titled “Target”ModelProperty
Parameters
Section titled “Parameters”None
Examples
Section titled “Examples”model Page<T> { @pageItems items: T[]; @nextLink next: url; @prevLink prev: url; @firstLink first: url; @lastLink last: url;}@list op listPets(): Page<Pet>;
@offset
Section titled “@offset”Pagination property defining the number of items to skip.
@offset
Target
Section titled “Target”ModelProperty
Parameters
Section titled “Parameters”None
Examples
Section titled “Examples”model Page<T> { @pageItems items: T[];}@list op listPets(@offset skip: int32, @pageSize pageSize: int8): Page<Pet>;
@opExample
Section titled “@opExample”Provide example values for an operation’s parameters and corresponding return type.
@opExample(example: valueof OperationExample, options?: valueof ExampleOptions)
Target
Section titled “Target”Operation
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
example | valueof OperationExample | Example value. |
options | valueof ExampleOptions | Optional metadata for the example. |
Examples
Section titled “Examples”@opExample(#{parameters: #{name: "Fluffy", age: 2}, returnType: #{name: "Fluffy", age: 2, id: "abc"})op createPet(pet: Pet): Pet;
@overload
Section titled “@overload”Specify this operation is an overload of the given operation.
@overload(overloadbase: Operation)
Target
Section titled “Target”Operation
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
overloadbase | Operation | Base operation that should be a union of all overloads |
Examples
Section titled “Examples”op upload(data: string | bytes, @header contentType: "text/plain" | "application/octet-stream"): void;@overload(upload)op uploadString(data: string, @header contentType: "text/plain" ): void;@overload(upload)op uploadBytes(data: bytes, @header contentType: "application/octet-stream"): void;
@pageIndex
Section titled “@pageIndex”Pagination property defining the page index.
@pageIndex
Target
Section titled “Target”ModelProperty
Parameters
Section titled “Parameters”None
Examples
Section titled “Examples”model Page<T> { @pageItems items: T[];}@list op listPets(@pageIndex page: int32, @pageSize pageSize: int8): Page<Pet>;
@pageItems
Section titled “@pageItems”Specify the the property that contains the array of page items.
@pageItems
Target
Section titled “Target”ModelProperty
Parameters
Section titled “Parameters”None
Examples
Section titled “Examples”model Page<T> { @pageItems items: T[];}@list op listPets(@pageIndex page: int32, @pageSize pageSize: int8): Page<Pet>;
@pageSize
Section titled “@pageSize”Specify the pagination parameter that controls the maximum number of items to include in a page.
@pageSize
Target
Section titled “Target”ModelProperty
Parameters
Section titled “Parameters”None
Examples
Section titled “Examples”model Page<T> { @pageItems items: T[];}@list op listPets(@pageIndex page: int32, @pageSize pageSize: int8): Page<Pet>;
@parameterVisibility
Section titled “@parameterVisibility”Declares the visibility constraint of the parameters of a given operation.
A parameter or property nested within a parameter will be visible if it has any of the visibilities in the list.
It is invalid to call this decorator with no visibility modifiers.
@parameterVisibility(...visibilities: valueof EnumMember[])
Target
Section titled “Target”Operation
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
visibilities | valueof EnumMember[] | List of visibility modifiers that apply to the parameters of this operation. |
@pattern
Section titled “@pattern”Specify the the pattern this string should respect using simple regular expression syntax.
The following syntax is allowed: alternations (|
), quantifiers (?
, *
, +
, and { }
), wildcard (.
), and grouping parentheses.
Advanced features like look-around, capture groups, and references are not supported.
This decorator may optionally provide a custom validation message. Emitters may choose to use the message to provide context when pattern validation fails. For the sake of consistency, the message should be a phrase that describes in plain language what sort of content the pattern attempts to validate. For example, a complex regular expression that validates a GUID string might have a message like “Must be a valid GUID.”
@pattern(pattern: valueof string, validationMessage?: valueof string)
Target
Section titled “Target”string | bytes | ModelProperty
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
pattern | valueof string | Regular expression. |
validationMessage | valueof string | Optional validation message that may provide context when validation fails. |
Examples
Section titled “Examples”@pattern("[a-z]+", "Must be a string consisting of only lower case letters and of at least one character.")scalar LowerAlpha extends string;
@prevLink
Section titled “@prevLink”Pagination property defining a link to the previous page.
It is expected that navigating to the link will return the same set of responses as the operation that returned the current page.
@prevLink
Target
Section titled “Target”ModelProperty
Parameters
Section titled “Parameters”None
Examples
Section titled “Examples”model Page<T> { @pageItems items: T[]; @nextLink next: url; @prevLink prev: url; @firstLink first: url; @lastLink last: url;}@list op listPets(): Page<Pet>;
@removeVisibility
Section titled “@removeVisibility”Removes visibility modifiers from a property.
If the visibility modifiers for a visibility class have not been initialized, this decorator will use the default visibility modifiers for the visibility class as the default modifier set.
@removeVisibility(...visibilities: valueof EnumMember[])
Target
Section titled “Target”The property to remove visibility from.
ModelProperty
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
visibilities | valueof EnumMember[] | The visibility modifiers to remove from the target property. |
Examples
Section titled “Examples”model Example { // This property will have all Lifecycle visibilities except the Read // visibility, since it is removed. @removeVisibility(Lifecycle.Read) secret_property: string;}
@returnsDoc
Section titled “@returnsDoc”Attach a documentation string to describe the successful return types of an operation.
If an operation returns a union of success and errors it only describes the success. See @errorsDoc
for error documentation.
@returnsDoc(doc: valueof string)
Target
Section titled “Target”Operation
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
doc | valueof string | Documentation string |
Examples
Section titled “Examples”@returnsDoc("Returns doc")op get(): Pet | NotFound;
@returnTypeVisibility
Section titled “@returnTypeVisibility”Declares the visibility constraint of the return type of a given operation.
A property within the return type of the operation will be visible if it has any of the visibilities in the list.
It is invalid to call this decorator with no visibility modifiers.
@returnTypeVisibility(...visibilities: valueof EnumMember[])
Target
Section titled “Target”Operation
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
visibilities | valueof EnumMember[] | List of visibility modifiers that apply to the return type of this operation. |
@secret
Section titled “@secret”Mark this string as a secret value that should be treated carefully to avoid exposure
@secret
Target
Section titled “Target”string | ModelProperty
Parameters
Section titled “Parameters”None
Examples
Section titled “Examples”@secretscalar Password is string;
@service
Section titled “@service”Mark this namespace as describing a service and configure service properties.
@service(options?: valueof ServiceOptions)
Target
Section titled “Target”Namespace
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
options | valueof ServiceOptions | Optional configuration for the service. |
Examples
Section titled “Examples”@servicenamespace PetStore;
Setting service title
Section titled “Setting service title”@service(#{title: "Pet store"})namespace PetStore;
Setting service version
Section titled “Setting service version”@service(#{version: "1.0"})namespace PetStore;
@summary
Section titled “@summary”Typically a short, single-line description.
@summary(summary: valueof string)
Target
Section titled “Target”unknown
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
summary | valueof string | Summary string. |
Examples
Section titled “Examples”@summary("This is a pet")model Pet {}
Attaches a tag to an operation, interface, or namespace. Multiple @tag
decorators can be specified to attach multiple tags to a TypeSpec element.
@tag(tag: valueof string)
Target
Section titled “Target”Namespace | Interface | Operation
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
tag | valueof string | Tag value |
@visibility
Section titled “@visibility”Sets the visibility modifiers that are active on a property, indicating that it is only considered to be present (or “visible”) in contexts that select for the given modifiers.
A property without any visibility settings applied for any visibility class (e.g. Lifecycle
) is considered to have
the default visibility settings for that class.
If visibility for the property has already been set for a visibility class (for example, using @invisible
or
@removeVisibility
), this decorator will add the specified visibility modifiers to the property.
See: Visibility
The @typespec/http
library uses Lifecycle
visibility to determine which properties are included in the request or
response bodies of HTTP operations. By default, it uses the following visibility settings:
- For the return type of operations, properties are included if they have
Lifecycle.Read
visibility. - For POST operation parameters, properties are included if they have
Lifecycle.Create
visibility. - For PUT operation parameters, properties are included if they have
Lifecycle.Create
orLifecycle.Update
visibility. - For PATCH operation parameters, properties are included if they have
Lifecycle.Update
visibility. - For DELETE operation parameters, properties are included if they have
Lifecycle.Delete
visibility. - For GET or HEAD operation parameters, properties are included if they have
Lifecycle.Query
visibility.
By default, properties have all five Lifecycle visibility modifiers enabled, so a property is visible in all contexts by default.
The default settings may be overridden using the @returnTypeVisibility
and @parameterVisibility
decorators.
See also: Automatic visibility
@visibility(...visibilities: valueof EnumMember[])
Target
Section titled “Target”ModelProperty
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
visibilities | valueof EnumMember[] | List of visibilities which apply to this property. |
Examples
Section titled “Examples”model Dog { // The service will generate an ID, so you don't need to send it. @visibility(Lifecycle.Read) id: int32;
// The service will store this secret name, but won't ever return it. @visibility(Lifecycle.Create, Lifecycle.Update) secretName: string;
// The regular name has all vi name: string;}
@withDefaultKeyVisibility
Section titled “@withDefaultKeyVisibility”Set the visibility of key properties in a model if not already set.
This will set the visibility modifiers of all key properties in the model if the visibility is not already explicitly set, but will not change the visibility of any properties that have visibility set explicitly, even if the visibility is the same as the default visibility.
Visibility may be set explicitly using any of the following decorators:
@visibility
@removeVisibility
@invisible
@withDefaultKeyVisibility(visibility: valueof EnumMember)
Target
Section titled “Target”Model
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
visibility | valueof EnumMember | The desired default visibility value. If a key property already has visibility set, it will not be changed. |
@withLifecycleUpdate
Section titled “@withLifecycleUpdate”Transforms the target
model to include only properties that are visible during the
“Update” lifecycle phase.
Any nested models of optional properties will be transformed into the “CreateOrUpdate” lifecycle phase instead of the “Update” lifecycle phase, so that nested models may be fully updated.
If a nameTemplate
is provided, newly-created type instances will be named according
to the template. See the @friendlyName
decorator for more information on the template
syntax. The transformed type is provided as the argument to the template.
@withLifecycleUpdate(nameTemplate?: valueof string)
Target
Section titled “Target”The model to apply the transformation to.
Model
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
nameTemplate | valueof string | The name template to use when renaming new model instances. |
Examples
Section titled “Examples”model Dog { @visibility(Lifecycle.Read) id: int32;
@visibility(Lifecycle.Create, Lifecycle.Update) secretName: string;
name: string;}
@withLifecycleUpdatemodel DogUpdate { ...Dog}
@withOptionalProperties
Section titled “@withOptionalProperties”Returns the model with required properties removed.
@withOptionalProperties
Target
Section titled “Target”Model
Parameters
Section titled “Parameters”None
@withoutDefaultValues
Section titled “@withoutDefaultValues”Returns the model with any default values removed.
@withoutDefaultValues
Target
Section titled “Target”Model
Parameters
Section titled “Parameters”None
@withoutOmittedProperties
Section titled “@withoutOmittedProperties”Returns the model with the given properties omitted.
@withoutOmittedProperties(omit: string | Union)
Target
Section titled “Target”Model
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
omit | string | Union | List of properties to omit |
@withPickedProperties
Section titled “@withPickedProperties”Returns the model with only the given properties included.
@withPickedProperties(pick: string | Union)
Target
Section titled “Target”Model
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
pick | string | Union | List of properties to include |
@withUpdateableProperties
Section titled “@withUpdateableProperties”Returns the model with non-updateable properties removed.
@withUpdateableProperties
Target
Section titled “Target”Model
Parameters
Section titled “Parameters”None
@withVisibility
Section titled “@withVisibility”Removes properties that do not have at least one of the given visibility modifiers active.
If no visibility modifiers are supplied, this decorator has no effect.
See also: Automatic visibility
When using an emitter that applies visibility automatically, it is generally not necessary to use this decorator.
@withVisibility(...visibilities: valueof EnumMember[])
Target
Section titled “Target”Model
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
visibilities | valueof EnumMember[] | List of visibilities that apply to this property. |
Examples
Section titled “Examples”model Dog { @visibility(Lifecycle.Read) id: int32;
@visibility(Lifecycle.Create, Lifecycle.Update) secretName: string;
name: string;}
// The spread operator will copy all the properties of Dog into DogRead,// and @withVisibility will then remove those that are not visible with// create or update visibility.//// In this case, the id property is removed, and the name and secretName// properties are kept.@withVisibility(Lifecycle.Create, Lifecycle.Update)model DogCreateOrUpdate { ...Dog;}
// In this case the id and name properties are kept and the secretName property// is removed.@withVisibility(Lifecycle.Read)model DogRead { ...Dog;}
@withVisibilityFilter
Section titled “@withVisibilityFilter”Applies the given visibility filter to the properties of the target model.
This transformation is recursive, so it will also apply the filter to any nested
or referenced models that are the types of any properties in the target
.
If a nameTemplate
is provided, newly-created type instances will be named according
to the template. See the @friendlyName
decorator for more information on the template
syntax. The transformed type is provided as the argument to the template.
@withVisibilityFilter(filter: valueof VisibilityFilter, nameTemplate?: valueof string)
Target
Section titled “Target”The model to apply the visibility filter to.
Model
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
filter | valueof VisibilityFilter | The visibility filter to apply to the properties of the target model. |
nameTemplate | valueof string | The name template to use when renaming new model instances. |
Examples
Section titled “Examples”model Dog { @visibility(Lifecycle.Read) id: int32;
name: string;}
@withVisibilityFilter(#{ all: #[Lifecycle.Read] })model DogRead { ...Dog}