diff --git a/.chronus/changes/witemple-msft-hsjs-hyperparam-optionality-2025-11-10-11-43-24.md b/.chronus/changes/witemple-msft-hsjs-hyperparam-optionality-2025-11-10-11-43-24.md new file mode 100644 index 00000000000..0fab7340042 --- /dev/null +++ b/.chronus/changes/witemple-msft-hsjs-hyperparam-optionality-2025-11-10-11-43-24.md @@ -0,0 +1,7 @@ +--- +changeKind: fix +packages: + - "@typespec/http-server-js" +--- + +Fixed a bug that caused optional query/header parameters to be improperly converted to primitive types when not provided in a request. \ No newline at end of file diff --git a/packages/http-server-js/src/http/server/index.ts b/packages/http-server-js/src/http/server/index.ts index 76717b5d215..a54351ccc7b 100644 --- a/packages/http-server-js/src/http/server/index.ts +++ b/packages/http-server-js/src/http/server/index.ts @@ -425,7 +425,11 @@ function* emitRawServerOperation( const encoder = jsScalar.http[httpOperationParam.type]; - paramBaseExpression = encoder.decode(paramNameSafe); + const decoded = encoder.decode(paramNameSafe); + + paramBaseExpression = param.optional + ? `${paramNameSafe} === undefined ? undefined : (${decoded})` + : decoded; } else { paramBaseExpression = paramNameSafe; }