Skip to content

Commit ef79b42

Browse files
authored
Don't emit binding pattern pattern / optional parameter error when an initializer is present (#52880)
1 parent 27376f1 commit ef79b42

File tree

4 files changed

+37
-1
lines changed

4 files changed

+37
-1
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37648,7 +37648,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
3764837648
error(node.name, Diagnostics.constructor_cannot_be_used_as_a_parameter_property_name);
3764937649
}
3765037650
}
37651-
if ((node.questionToken || isJSDocOptionalParameter(node)) && isBindingPattern(node.name) && (func as FunctionLikeDeclaration).body) {
37651+
if (!node.initializer && isOptionalDeclaration(node) && isBindingPattern(node.name) && (func as FunctionLikeDeclaration).body) {
3765237652
error(node, Diagnostics.A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature);
3765337653
}
3765437654
if (node.name && isIdentifier(node.name) && (node.name.escapedText === "this" || node.name.escapedText === "new")) {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
=== /a.js ===
2+
/**
3+
* @param {{ cause?: string }} [options]
4+
*/
5+
function foo({ cause } = {}) {
6+
>foo : Symbol(foo, Decl(a.js, 0, 0))
7+
>cause : Symbol(cause, Decl(a.js, 3, 14))
8+
9+
return cause;
10+
>cause : Symbol(cause, Decl(a.js, 3, 14))
11+
}
12+
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
=== /a.js ===
2+
/**
3+
* @param {{ cause?: string }} [options]
4+
*/
5+
function foo({ cause } = {}) {
6+
>foo : ({ cause }?: { cause?: string;}) => string
7+
>cause : string
8+
>{} : {}
9+
10+
return cause;
11+
>cause : string
12+
}
13+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// @checkJs: true
2+
// @allowJs: true
3+
// @noEmit: true
4+
// @filename: /a.js
5+
6+
/**
7+
* @param {{ cause?: string }} [options]
8+
*/
9+
function foo({ cause } = {}) {
10+
return cause;
11+
}

0 commit comments

Comments
 (0)