diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 50cf05bad962d..e55689d56d529 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -37652,7 +37652,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { error(node.name, Diagnostics.constructor_cannot_be_used_as_a_parameter_property_name); } } - if ((node.questionToken || isJSDocOptionalParameter(node)) && isBindingPattern(node.name) && (func as FunctionLikeDeclaration).body) { + if (!node.initializer && isOptionalDeclaration(node) && isBindingPattern(node.name) && (func as FunctionLikeDeclaration).body) { error(node, Diagnostics.A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature); } if (node.name && isIdentifier(node.name) && (node.name.escapedText === "this" || node.name.escapedText === "new")) { diff --git a/tests/baselines/reference/optionalBindingParameters4.symbols b/tests/baselines/reference/optionalBindingParameters4.symbols new file mode 100644 index 0000000000000..4ff4cd66c76c5 --- /dev/null +++ b/tests/baselines/reference/optionalBindingParameters4.symbols @@ -0,0 +1,12 @@ +=== /a.js === +/** +* @param {{ cause?: string }} [options] +*/ +function foo({ cause } = {}) { +>foo : Symbol(foo, Decl(a.js, 0, 0)) +>cause : Symbol(cause, Decl(a.js, 3, 14)) + + return cause; +>cause : Symbol(cause, Decl(a.js, 3, 14)) +} + diff --git a/tests/baselines/reference/optionalBindingParameters4.types b/tests/baselines/reference/optionalBindingParameters4.types new file mode 100644 index 0000000000000..ddc4c1e8a7249 --- /dev/null +++ b/tests/baselines/reference/optionalBindingParameters4.types @@ -0,0 +1,13 @@ +=== /a.js === +/** +* @param {{ cause?: string }} [options] +*/ +function foo({ cause } = {}) { +>foo : ({ cause }?: { cause?: string;}) => string +>cause : string +>{} : {} + + return cause; +>cause : string +} + diff --git a/tests/cases/conformance/es6/destructuring/optionalBindingParameters4.ts b/tests/cases/conformance/es6/destructuring/optionalBindingParameters4.ts new file mode 100644 index 0000000000000..40a468ad287eb --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/optionalBindingParameters4.ts @@ -0,0 +1,11 @@ +// @checkJs: true +// @allowJs: true +// @noEmit: true +// @filename: /a.js + +/** +* @param {{ cause?: string }} [options] +*/ +function foo({ cause } = {}) { + return cause; +}