Don't emit binding pattern pattern / optional parameter error when an initializer is present (#52880)

This commit is contained in:
Jake Bailey 2023-02-21 18:05:02 -08:00 committed by GitHub
parent 27376f1577
commit ef79b42b57
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 37 additions and 1 deletions

View File

@ -37648,7 +37648,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")) {

View File

@ -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))
}

View File

@ -0,0 +1,13 @@
=== /a.js ===
/**
* @param {{ cause?: string }} [options]
*/
function foo({ cause } = {}) {
>foo : ({ cause }?: { cause?: string;}) => string
>cause : string
>{} : {}
return cause;
>cause : string
}

View File

@ -0,0 +1,11 @@
// @checkJs: true
// @allowJs: true
// @noEmit: true
// @filename: /a.js
/**
* @param {{ cause?: string }} [options]
*/
function foo({ cause } = {}) {
return cause;
}