@@ -3245,7 +3245,9 @@ namespace ts {
32453245
32463246 // Use type from type annotation if one is present
32473247 if (declaration.type) {
3248- return addOptionality(getTypeFromTypeNode(declaration.type), /*optional*/ declaration.questionToken && includeOptionality);
3248+ const isOptional = declaration.questionToken ||
3249+ (declaration.initializer && declaration.kind === SyntaxKind.Parameter && !(getModifierFlags(declaration) & ModifierFlags.ParameterPropertyModifier));
3250+ return addOptionality(getTypeFromTypeNode(declaration.type), /*optional*/ isOptional && includeOptionality);
32493251 }
32503252
32513253 if ((compilerOptions.noImplicitAny || declaration.flags & NodeFlags.JavaScriptFile) &&
@@ -9042,8 +9044,8 @@ namespace ts {
90429044 switch (source.kind) {
90439045 case SyntaxKind.Identifier:
90449046 return target.kind === SyntaxKind.Identifier && getResolvedSymbol(<Identifier>source) === getResolvedSymbol(<Identifier>target) ||
9045- (target.kind === SyntaxKind.VariableDeclaration || target.kind === SyntaxKind.BindingElement) &&
9046- getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(<Identifier> source)) === getSymbolOfNode(target);
9047+ (target.kind === SyntaxKind.VariableDeclaration || target.kind === SyntaxKind.BindingElement) && getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(<Identifier>source)) === getSymbolOfNode(target) ||
9048+ target.kind === SyntaxKind.Parameter && getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(source as Identifier )) === getSymbolOfNode(target);
90479049 case SyntaxKind.ThisKeyword:
90489050 return target.kind === SyntaxKind.ThisKeyword;
90499051 case SyntaxKind.PropertyAccessExpression:
@@ -9314,7 +9316,7 @@ namespace ts {
93149316 return links.resolvedType || getTypeOfExpression(node);
93159317 }
93169318
9317- function getInitialTypeOfVariableDeclaration(node: VariableDeclaration) {
9319+ function getInitialTypeOfVariableDeclaration(node: VariableDeclaration | ParameterDeclaration ) {
93189320 if (node.initializer) {
93199321 return getTypeOfInitializer(node.initializer);
93209322 }
@@ -9327,15 +9329,15 @@ namespace ts {
93279329 return unknownType;
93289330 }
93299331
9330- function getInitialType(node: VariableDeclaration | BindingElement) {
9331- return node.kind === SyntaxKind.VariableDeclaration ?
9332- getInitialTypeOfVariableDeclaration(<VariableDeclaration>node) :
9332+ function getInitialType(node: VariableDeclaration | BindingElement | ParameterDeclaration ) {
9333+ return node.kind === SyntaxKind.VariableDeclaration || node.kind === SyntaxKind.Parameter ?
9334+ getInitialTypeOfVariableDeclaration(<VariableDeclaration | ParameterDeclaration >node) :
93339335 getInitialTypeOfBindingElement(<BindingElement>node);
93349336 }
93359337
93369338 function getInitialOrAssignedType(node: VariableDeclaration | BindingElement | Expression) {
9337- return node.kind === SyntaxKind.VariableDeclaration || node.kind === SyntaxKind.BindingElement ?
9338- getInitialType(<VariableDeclaration | BindingElement>node) :
9339+ return node.kind === SyntaxKind.VariableDeclaration || node.kind === SyntaxKind.BindingElement || node.kind === SyntaxKind.Parameter ?
9340+ getInitialType(<VariableDeclaration | BindingElement | ParameterDeclaration >node) :
93399341 getAssignedType(<Expression>node);
93409342 }
93419343
0 commit comments