Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .chronus/changes/tcgc-api-version-optional-2026-01-20.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
changeKind: fix
packages:
- "@azure-tools/typespec-client-generator-core"
---

The `apiVersion` parameter in client initialization is now correctly marked as `optional: true` for all client-level API version parameters, including both single-service and multi-service scenarios.
4 changes: 4 additions & 0 deletions packages/typespec-client-generator-core/src/clients.ts
Original file line number Diff line number Diff line change
Expand Up @@ -257,8 +257,12 @@ function addDefaultClientParameters<
multipleServiceApiVersionParam.apiVersions = [];
multipleServiceApiVersionParam.clientDefaultValue = undefined;
multipleServiceApiVersionParam.type = getTypeSpecBuiltInType(context, "string");
// API version parameters at the client level should always be optional
multipleServiceApiVersionParam.optional = true;
defaultClientParamters.push(multipleServiceApiVersionParam);
} else {
// API version parameters at the client level should always be optional
apiVersionParam.optional = true;
defaultClientParamters.push(apiVersionParam);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -599,7 +599,7 @@ it("service with default api version, method with api version param", async () =
const clientApiVersionParam = client.clientInitialization.parameters[1];
strictEqual(clientApiVersionParam.name, "apiVersion");
strictEqual(clientApiVersionParam.onClient, true);
strictEqual(clientApiVersionParam.optional, false);
strictEqual(clientApiVersionParam.optional, true);
strictEqual(clientApiVersionParam.kind, "method");
strictEqual(clientApiVersionParam.clientDefaultValue, "v1");
strictEqual(clientApiVersionParam.isApiVersionParam, true);
Expand Down Expand Up @@ -646,7 +646,7 @@ it("service with default api version, method with path api version param", async
const clientApiVersionParam = client.clientInitialization.parameters[1];
strictEqual(clientApiVersionParam.name, "apiVersion");
strictEqual(clientApiVersionParam.onClient, true);
strictEqual(clientApiVersionParam.optional, false);
strictEqual(clientApiVersionParam.optional, true);
strictEqual(clientApiVersionParam.kind, "method");
strictEqual(clientApiVersionParam.clientDefaultValue, "v1");
strictEqual(clientApiVersionParam.isApiVersionParam, true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -498,7 +498,7 @@ it("single with core", async () => {
)[0];
strictEqual(apiVersionParam.name, "apiVersion");
strictEqual(apiVersionParam.onClient, true);
strictEqual(apiVersionParam.optional, false);
strictEqual(apiVersionParam.optional, true);
strictEqual(apiVersionParam.kind, "method");
strictEqual(apiVersionParam.clientDefaultValue, "2022-12-01-preview");
});
Expand Down Expand Up @@ -564,7 +564,7 @@ it("multiple with core", async () => {
)[0];
strictEqual(apiVersionParam.name, "apiVersion");
strictEqual(apiVersionParam.onClient, true);
strictEqual(apiVersionParam.optional, false);
strictEqual(apiVersionParam.optional, true);
strictEqual(apiVersionParam.kind, "method");
strictEqual(apiVersionParam.clientDefaultValue, "2022-12-01");
});
Expand Down Expand Up @@ -816,6 +816,7 @@ it("one client from multiple services", async () => {
strictEqual(apiVersionParam.clientDefaultValue, undefined);
// For multi-service clients, the api version param type should be string
strictEqual(apiVersionParam.type.kind, "string");
strictEqual(apiVersionParam.optional, true);
const aiClient = client.children!.find((c) => c.name === "AI");
ok(aiClient);

Expand Down Expand Up @@ -999,6 +1000,7 @@ it("one client from multiple services without version dependency", async () => {
strictEqual(apiVersionParam.clientDefaultValue, undefined);
// For multi-service clients, the api version param type should be string
strictEqual(apiVersionParam.type.kind, "string");
strictEqual(apiVersionParam.optional, true);

const aiClient = client.children!.find((c) => c.name === "AI");
ok(aiClient);
Expand Down Expand Up @@ -1121,6 +1123,7 @@ it("one client from multiple services with `@clientLocation`", async () => {
strictEqual(apiVersionParam.clientDefaultValue, undefined);
// For multi-service clients, the api version param type should be string
strictEqual(apiVersionParam.type.kind, "string");
strictEqual(apiVersionParam.optional, true);

const aiClient = client.children!.find((c) => c.name === "AI");
ok(aiClient);
Expand Down
Loading