Skip to main content
Version: Next 🚧

Decorators

TypeSpec.Versioning

@added

Identifies when the target was added.

@TypeSpec.Versioning.added(version: EnumMember)

Target

Model | ModelProperty | Operation | Enum | EnumMember | Union | UnionVariant | Scalar | Interface

Parameters

NameTypeDescription
versionEnumMemberThe version that the target was added in.

Examples

@added(Versions.v2)
op addedInV2(): void;

@added(Versions.v2)
model AlsoAddedInV2 {}

model Foo {
name: string;

@added(Versions.v3)
addedInV3: string;
}

@madeOptional

Identifies when a target was made optional.

@TypeSpec.Versioning.madeOptional(version: EnumMember)

Target

ModelProperty

Parameters

NameTypeDescription
versionEnumMemberThe version that the target was made optional in.

Examples

model Foo {
name: string;

@madeOptional(Versions.v2)
nickname?: string;
}

@madeRequired

Identifies when a target was made required.

@TypeSpec.Versioning.madeRequired(version: EnumMember)

Target

ModelProperty

Parameters

NameTypeDescription
versionEnumMemberThe version that the target was made required in.

Examples

model Foo {
name: string;

@madeRequired(Versions.v2)
nickname: string;
}

@removed

Identifies when the target was removed.

@TypeSpec.Versioning.removed(version: EnumMember)

Target

Model | ModelProperty | Operation | Enum | EnumMember | Union | UnionVariant | Scalar | Interface

Parameters

NameTypeDescription
versionEnumMemberThe version that the target was removed in.

Examples

@removed(Versions.v2)
op removedInV2(): void;

@removed(Versions.v2)
model AlsoRemovedInV2 {}

model Foo {
name: string;

@removed(Versions.v3)
removedInV3: string;
}

@renamedFrom

Identifies when the target has been renamed.

@TypeSpec.Versioning.renamedFrom(version: EnumMember, oldName: valueof string)

Target

Model | ModelProperty | Operation | Enum | EnumMember | Union | UnionVariant | Scalar | Interface

Parameters

NameTypeDescription
versionEnumMemberThe version that the target was renamed in.
oldNamevalueof stringThe previous name of the target.

Examples

@renamedFrom(Versions.v2, "oldName")
op newName(): void;

@returnTypeChangedFrom

Identifies when the target type changed.

@TypeSpec.Versioning.returnTypeChangedFrom(version: EnumMember, oldType: unknown)

Target

Operation

Parameters

NameTypeDescription
versionEnumMemberThe version that the target type changed in.
oldTypeunknownThe previous type of the target.

@typeChangedFrom

Identifies when the target type changed.

@TypeSpec.Versioning.typeChangedFrom(version: EnumMember, oldType: unknown)

Target

ModelProperty

Parameters

NameTypeDescription
versionEnumMemberThe version that the target type changed in.
oldTypeunknownThe previous type of the target.

@useDependency

Identifies that a namespace or a given versioning enum member relies upon a versioned package.

@TypeSpec.Versioning.useDependency(...versionRecords: EnumMember[])

Target

EnumMember | Namespace

Parameters

NameTypeDescription
versionRecordsEnumMember[]The dependent library version(s) for the target namespace or version.

Examples

Select a single version of MyLib to use
@useDependency(MyLib.Versions.v1_1)
namespace NonVersionedService;
Select which version of the library match to which version of the service.
@versioned(Versions)
namespace MyService1;
enum Version {
@useDependency(MyLib.Versions.v1_1) // V1 use lib v1_1
v1,
@useDependency(MyLib.Versions.v1_1) // V2 use lib v1_1
v2,
@useDependency(MyLib.Versions.v2) // V3 use lib v2
v3,
}

@versioned

Identifies that the decorated namespace is versioned by the provided enum.

@TypeSpec.Versioning.versioned(versions: Enum)

Target

Namespace

Parameters

NameTypeDescription
versionsEnumThe enum that describes the supported versions.

Examples

@versioned(Versions)
namespace MyService;
enum Versions {
v1,
v2,
v3,
}