---
title: October 2022
---

# Release Notes October 2022 (2022-10-12)

This release contains **breaking changes**:

- **`TypeSpec`**: Cannot `extends` or `is` a model expression via alias
- **`Api`**: Removed `createProgram` and changed `compile` parameter order
- **`TypeSpec`** **Deprecation** `@service` decorator replacing `@serviceTitle` and `@serviceVersion`
- **`TypeSpec`** **`Api`**: Move `@discriminator` to compiler

## [TypeSpec] Cannot `extends` or `is` a model expression via alias [PR 1004](https://github.com/microsoft/typespec/pull/1004)

Using model expression for `is` or `extends` directly was already forbidden.

<!-- prettier-ignore -->
```typespec
model IsModelExpr is {bar: string} {}

model ExtendsModelExpr extends {bar: string} {}
```

The following workaround was however tolerated. This PR remove this functionality.

<!-- prettier-ignore -->
```typespec
alias ModExpr = {bar: string};
model IsModelExprWAlias is ModExpr {}

model ExtendsModelExprWAlias extends ModExpr {}
```

Use a named model instead of an alias.

## [API] Removed `createProgram` and changed `compile` parameter order

`createProgram` has been removed in favor of `compile`. The new compile has the same parameter as `createProgram`

```ts
// Before
createProgram(host, "main.tsp);

// After
compile(host, "main.tsp");
```

`compile` api was changed to match the same order as old `createProggram`

```ts
// Before
compile("main.tsp", host);

// After
compile(host, "main.tsp");
```

## [TypeSpec] Deprecation: @service decorator replacing `@serviceTitle` and `@serviceVersion`

- `@serviceTitle` has been deprecated
- `@serviceVersion` has been deprecated

```typespec
// Before
@serviceTitle("Pet Store")
@serviceVersion("v1")
namespace PetStore;

// After
@service({"Pet Store", version: "v1"})
namespace PetStore;
```

This allows to specify the service namespace without any title or version

```typespec
@service
namespace PetStore;
```

## [TypeSpec] [Api] Move `@discriminator` to compiler

The `@discriminator` has been moved to the compiler. This means that if you were using the fully qualified name to reference the decorator `@TypeSpec.Rest.disriminator` it should be changed to `@discriminator`

**No changes**

```typespec
using TypeSpec.Rest;

@disriminator("kind")
model Pet {}
```

**Before**

```typespec
@TypeSpec.Rest.disriminator("kind")
model Pet {}
```

**After**

```typespec
@disriminator("kind")
model Pet {}
```

### Change to api

the `getDiscriminator` accessor has also been removed into the compiler.

Before

```ts
import { getDiscriminator } from "@typespec/rest";
```

After

```ts
import { getDiscriminator } from "@typespec/compiler";
```
