From d6deec6565802c5997b2e39091b61494d4eea568 Mon Sep 17 00:00:00 2001 From: "Jiao Di (MSFT)" Date: Thu, 27 Nov 2025 15:04:49 +0800 Subject: [PATCH 1/2] add ut --- .../samples/parameters/optionalParameter.md | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 packages/typespec-ts/test/modularUnit/scenarios/samples/parameters/optionalParameter.md diff --git a/packages/typespec-ts/test/modularUnit/scenarios/samples/parameters/optionalParameter.md b/packages/typespec-ts/test/modularUnit/scenarios/samples/parameters/optionalParameter.md new file mode 100644 index 0000000000..a5345d54ea --- /dev/null +++ b/packages/typespec-ts/test/modularUnit/scenarios/samples/parameters/optionalParameter.md @@ -0,0 +1,90 @@ +# Optional parameters should not appear as standalone parameters in sample code + +## TypeSpec + +```typespec +import "@typespec/http"; +import "@typespec/rest"; +import "@azure-tools/typespec-azure-core"; +import "@azure-tools/typespec-client-generator-core"; + +using TypeSpec.Http; +using TypeSpec.Rest; +using Azure.Core; + +@service(#{ + title: "Sample Service", +}) +@server( + "{endpoint}", + "Sample endpoint", + { + @doc("The endpoint URL") + endpoint: string = "https://example.com", + } +) +namespace SampleService; + +model Person { + id: string; + name: string; +} + +@route("/persons") +interface Persons { + @get + list( + @query start?: string, + @query top?: int32, + ): Person[]; +} +``` + +## Example + +```json +{ + "title": "List persons", + "operationId": "Persons_List", + "parameters": { + "start": "00000000-0000-0000-0000-000000000000", + "top": 20 + }, + "responses": { + "200": { + "body": [ + { + "id": "person1", + "name": "John Doe" + } + ] + } + } +} +``` + +## Generated Sample + +```ts samples +/** This file path is /samples-dev/listSample.ts */ +import { SampleServiceClient } from "@azure/internal-test"; + +/** + * This sample demonstrates how to execute list + * + * @summary execute list + * x-ms-original-file: 2021-10-01-preview/json.json + */ +async function listPersons(): Promise { + const endpoint = process.env.SAMPLE_SERVICE_ENDPOINT || ""; + const client = new SampleServiceClient(endpoint); + const result = await client.list({ start: "00000000-0000-0000-0000-000000000000", top: 20 }); + console.log(result); +} + +async function main(): Promise { + await listPersons(); +} + +main().catch(console.error); +``` From ab31c424a42540de9b6661a41995e0d661c7dba6 Mon Sep 17 00:00:00 2001 From: "Jiao Di (MSFT)" Date: Thu, 27 Nov 2025 15:05:01 +0800 Subject: [PATCH 2/2] fix --- packages/typespec-ts/src/modular/emitSamples.ts | 3 ++- .../scenarios/samples/parameters/optionalParameter.md | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/typespec-ts/src/modular/emitSamples.ts b/packages/typespec-ts/src/modular/emitSamples.ts index eef979aa27..bea5d655b2 100644 --- a/packages/typespec-ts/src/modular/emitSamples.ts +++ b/packages/typespec-ts/src/modular/emitSamples.ts @@ -298,7 +298,8 @@ function prepareExampleParameters( topLevelClient, dpgContext, { - onClientOnly: true + onClientOnly: true, + requiredOnly: true } ); diff --git a/packages/typespec-ts/test/modularUnit/scenarios/samples/parameters/optionalParameter.md b/packages/typespec-ts/test/modularUnit/scenarios/samples/parameters/optionalParameter.md index a5345d54ea..4a03cf5e37 100644 --- a/packages/typespec-ts/test/modularUnit/scenarios/samples/parameters/optionalParameter.md +++ b/packages/typespec-ts/test/modularUnit/scenarios/samples/parameters/optionalParameter.md @@ -76,8 +76,7 @@ import { SampleServiceClient } from "@azure/internal-test"; * x-ms-original-file: 2021-10-01-preview/json.json */ async function listPersons(): Promise { - const endpoint = process.env.SAMPLE_SERVICE_ENDPOINT || ""; - const client = new SampleServiceClient(endpoint); + const client = new SampleServiceClient(); const result = await client.list({ start: "00000000-0000-0000-0000-000000000000", top: 20 }); console.log(result); }