@@ -2695,7 +2695,7 @@ namespace ts {
26952695 writeSpace(writer);
26962696
26972697 let type = getTypeOfSymbol(p);
2698- if (strictNullChecks && parameterNode.initializer && !(getModifierFlags( parameterNode) & ModifierFlags.ParameterPropertyModifier )) {
2698+ if (isRequiredInitializedParameter( parameterNode)) {
26992699 type = includeFalsyTypes(type, TypeFlags.Undefined);
27002700 }
27012701 buildTypeDisplay(type, writer, enclosingDeclaration, flags, symbolStack);
@@ -3182,12 +3182,6 @@ namespace ts {
31823182 }
31833183 return parentType;
31843184 }
3185- // In strict null checking mode, a default value of a binding pattern adds undefined,
3186- // which should be removed to get the type of the elements
3187- const func = getContainingFunction(declaration);
3188- if (strictNullChecks && func && !func.body && getFalsyFlags(parentType) & TypeFlags.Undefined) {
3189- parentType = getTypeWithFacts(parentType, TypeFacts.NEUndefined);
3190- }
31913185
31923186 let type: Type;
31933187 if (pattern.kind === SyntaxKind.ObjectBindingPattern) {
@@ -20554,6 +20548,13 @@ namespace ts {
2055420548 return false;
2055520549 }
2055620550
20551+ function isRequiredInitializedParameter(parameter: ParameterDeclaration) {
20552+ return strictNullChecks &&
20553+ !isOptionalParameter(parameter) &&
20554+ parameter.initializer &&
20555+ !(getModifierFlags(parameter) & ModifierFlags.ParameterPropertyModifier);
20556+ }
20557+
2055720558 function getNodeCheckFlags(node: Node): NodeCheckFlags {
2055820559 node = getParseTreeNode(node);
2055920560 return node ? getNodeLinks(node).flags : undefined;
@@ -20648,13 +20649,9 @@ namespace ts {
2064820649 let type = symbol && !(symbol.flags & (SymbolFlags.TypeLiteral | SymbolFlags.Signature))
2064920650 ? getWidenedLiteralType(getTypeOfSymbol(symbol))
2065020651 : unknownType;
20651- if (strictNullChecks &&
20652- declaration.kind === SyntaxKind.Parameter &&
20653- (declaration as ParameterDeclaration).initializer &&
20654- !(getModifierFlags(declaration) & ModifierFlags.ParameterPropertyModifier)) {
20652+ if (flags & TypeFormatFlags.AddUndefined) {
2065520653 type = includeFalsyTypes(type, TypeFlags.Undefined);
2065620654 }
20657-
2065820655 getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
2065920656 }
2066020657
@@ -20753,6 +20750,7 @@ namespace ts {
2075320750 isTopLevelValueImportEqualsWithEntityName,
2075420751 isDeclarationVisible,
2075520752 isImplementationOfOverload,
20753+ isRequiredInitializedParameter,
2075620754 writeTypeOfDeclaration,
2075720755 writeReturnTypeOfSignatureDeclaration,
2075820756 writeTypeOfExpression,
0 commit comments