@@ -8316,7 +8316,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
8316
8316
* @param symbol - The symbol is used both to find an existing annotation if declaration is not provided, and to determine if `unique symbol` should be printed
8317
8317
*/
8318
8318
function serializeTypeForDeclaration(context: NodeBuilderContext, declaration: Declaration | undefined, type: Type, symbol: Symbol) {
8319
- const addUndefinedForParameter = declaration && (isParameter(declaration) || isJSDocParameterTag(declaration)) && requiresAddingImplicitUndefined(declaration);
8319
+ const addUndefinedForParameter = declaration && (isParameter(declaration) || isJSDocParameterTag(declaration)) && requiresAddingImplicitUndefined(declaration, context.enclosingDeclaration );
8320
8320
const enclosingDeclaration = context.enclosingDeclaration;
8321
8321
const restoreFlags = saveRestoreFlags(context);
8322
8322
if (declaration && hasInferredType(declaration) && !(context.internalFlags & InternalNodeBuilderFlags.NoSyntacticPrinter)) {
@@ -49591,16 +49591,19 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
49591
49591
const type = getTypeFromTypeNode(typeNode);
49592
49592
return containsUndefinedType(type);
49593
49593
}
49594
- function requiresAddingImplicitUndefined(parameter: ParameterDeclaration | JSDocParameterTag) {
49595
- return (isRequiredInitializedParameter(parameter) || isOptionalUninitializedParameterProperty(parameter)) && !declaredParameterTypeContainsUndefined(parameter);
49594
+
49595
+ function requiresAddingImplicitUndefined(parameter: ParameterDeclaration | JSDocParameterTag, enclosingDeclaration: Node | undefined) {
49596
+ return (isRequiredInitializedParameter(parameter, enclosingDeclaration) || isOptionalUninitializedParameterProperty(parameter)) && !declaredParameterTypeContainsUndefined(parameter);
49596
49597
}
49597
49598
49598
- function isRequiredInitializedParameter(parameter: ParameterDeclaration | JSDocParameterTag): boolean {
49599
- return !!strictNullChecks &&
49600
- !isOptionalParameter(parameter) &&
49601
- !isJSDocParameterTag(parameter) &&
49602
- !!parameter.initializer &&
49603
- !hasSyntacticModifier(parameter, ModifierFlags.ParameterPropertyModifier);
49599
+ function isRequiredInitializedParameter(parameter: ParameterDeclaration | JSDocParameterTag, enclosingDeclaration: Node | undefined): boolean {
49600
+ if (!strictNullChecks || isOptionalParameter(parameter) || isJSDocParameterTag(parameter) || !parameter.initializer) {
49601
+ return false;
49602
+ }
49603
+ if (hasSyntacticModifier(parameter, ModifierFlags.ParameterPropertyModifier)) {
49604
+ return !!enclosingDeclaration && isFunctionLikeDeclaration(enclosingDeclaration);
49605
+ }
49606
+ return true;
49604
49607
}
49605
49608
49606
49609
function isOptionalUninitializedParameterProperty(parameter: ParameterDeclaration | JSDocParameterTag) {
0 commit comments