@@ -15122,11 +15122,17 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1512215122 return symbol && withAugmentations ? getMergedSymbol(symbol) : symbol;
1512315123 }
1512415124
15125+ function hasEffectiveQuestionToken(node: ParameterDeclaration | JSDocParameterTag | JSDocPropertyTag) {
15126+ return hasQuestionToken(node) || isOptionalJSDocPropertyLikeTag(node) || isParameter(node) && isJSDocOptionalParameter(node);
15127+ }
15128+
1512515129 function isOptionalParameter(node: ParameterDeclaration | JSDocParameterTag | JSDocPropertyTag) {
15126- if (hasQuestionToken(node) || isOptionalJSDocPropertyLikeTag(node) || isJSDocOptionalParameter (node)) {
15130+ if (hasEffectiveQuestionToken (node)) {
1512715131 return true;
1512815132 }
15129-
15133+ if (!isParameter(node)) {
15134+ return false;
15135+ }
1513015136 if (node.initializer) {
1513115137 const signature = getSignatureFromDeclaration(node.parent);
1513215138 const parameterIndex = node.parent.parameters.indexOf(node);
@@ -15256,10 +15262,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1525615262 }
1525715263
1525815264 // Record a new minimum argument count if this is not an optional parameter
15259- const isOptionalParameter = isOptionalJSDocPropertyLikeTag(param) ||
15260- param.initializer || param.questionToken || isRestParameter(param) ||
15261- iife && parameters.length > iife.arguments.length && !type ||
15262- isJSDocOptionalParameter(param);
15265+ const isOptionalParameter = hasEffectiveQuestionToken(param) ||
15266+ isParameter(param) && param.initializer || isRestParameter(param) ||
15267+ iife && parameters.length > iife.arguments.length && !type;
1526315268 if (!isOptionalParameter) {
1526415269 minArgumentCount = parameters.length;
1526515270 }
@@ -49601,7 +49606,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4960149606 return grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_cannot_have_an_initializer);
4960249607 }
4960349608 }
49604- else if (isOptionalParameter (parameter)) {
49609+ else if (hasEffectiveQuestionToken (parameter)) {
4960549610 seenOptionalParameter = true;
4960649611 if (parameter.questionToken && parameter.initializer) {
4960749612 return grammarErrorOnNode(parameter.name, Diagnostics.Parameter_cannot_have_question_mark_and_initializer);
0 commit comments