@@ -213,7 +213,7 @@ namespace ts {
213213 return node ? getConstantValue(node) : undefined;
214214 },
215215 isValidPropertyAccess: (node, propertyName) => {
216- node = getParseTreeNode(node, isPropertyAccessOrQualifiedName );
216+ node = getParseTreeNode(node, isPropertyAccessOrQualifiedNameOrImportTypeNode );
217217 return !!node && isValidPropertyAccess(node, escapeLeadingUnderscores(propertyName));
218218 },
219219 isValidPropertyAccessForCompletions: (node, type, property) => {
@@ -8547,7 +8547,7 @@ namespace ts {
85478547 return links.resolvedType = unknownType;
85488548 }
85498549 const moduleSymbol = resolveExternalModuleSymbol(innerModuleSymbol, /*dontResolveAlias*/ false);
8550- if (node.qualifier) {
8550+ if (!nodeIsMissing( node.qualifier) ) {
85518551 const nameStack: Identifier[] = getIdentifierChain(node.qualifier);
85528552 let currentNamespace = moduleSymbol;
85538553 let current: Identifier | undefined;
@@ -16237,11 +16237,13 @@ namespace ts {
1623716237 * @param type The type of left.
1623816238 * @param prop The symbol for the right hand side of the property access.
1623916239 */
16240- function checkPropertyAccessibility(node: PropertyAccessExpression | QualifiedName | VariableLikeDeclaration, left: Expression | QualifiedName, type: Type, prop: Symbol): boolean {
16240+ function checkPropertyAccessibility(node: PropertyAccessExpression | QualifiedName | VariableLikeDeclaration | ImportTypeNode , left: Expression | QualifiedName | ImportTypeNode , type: Type, prop: Symbol): boolean {
1624116241 const flags = getDeclarationModifierFlagsFromSymbol(prop);
1624216242 const errorNode = node.kind === SyntaxKind.PropertyAccessExpression || node.kind === SyntaxKind.VariableDeclaration ?
1624316243 node.name :
16244- (<QualifiedName>node).right;
16244+ node.kind === SyntaxKind.ImportTypeNode ?
16245+ node :
16246+ (<QualifiedName>node).right;
1624516247
1624616248 if (getCheckFlags(prop) & CheckFlags.ContainsPrivate) {
1624716249 // Synthetic property with private constituent property
@@ -16680,13 +16682,19 @@ namespace ts {
1668016682 (getCheckFlags(prop) & CheckFlags.Instantiated ? getSymbolLinks(prop).target : prop).isReferenced = SymbolFlags.All;
1668116683 }
1668216684
16683- function isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: __String): boolean {
16684- const left = node.kind === SyntaxKind.PropertyAccessExpression ? node.expression : node.left;
16685- return isValidPropertyAccessWithType(node, left, propertyName, getWidenedType(checkExpression(left)));
16685+ function isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName | ImportTypeNode, propertyName: __String): boolean {
16686+ switch (node.kind) {
16687+ case SyntaxKind.PropertyAccessExpression:
16688+ return isValidPropertyAccessWithType(node, node.expression, propertyName, getWidenedType(checkExpression(node.expression)));
16689+ case SyntaxKind.QualifiedName:
16690+ return isValidPropertyAccessWithType(node, node.left, propertyName, getWidenedType(checkExpression(node.left)));
16691+ case SyntaxKind.ImportTypeNode:
16692+ return isValidPropertyAccessWithType(node, node, propertyName, getTypeFromTypeNode(node));
16693+ }
1668616694 }
1668716695
16688- function isValidPropertyAccessForCompletions(node: PropertyAccessExpression, type: Type, property: Symbol): boolean {
16689- return isValidPropertyAccessWithType(node, node.expression, property.escapedName, type)
16696+ function isValidPropertyAccessForCompletions(node: PropertyAccessExpression | ImportTypeNode , type: Type, property: Symbol): boolean {
16697+ return isValidPropertyAccessWithType(node, node.kind === SyntaxKind.ImportTypeNode ? node : node. expression, property.escapedName, type)
1669016698 && (!(property.flags & SymbolFlags.Method) || isValidMethodAccess(property, type));
1669116699 }
1669216700 function isValidMethodAccess(method: Symbol, actualThisType: Type): boolean {
@@ -16708,8 +16716,8 @@ namespace ts {
1670816716 }
1670916717
1671016718 function isValidPropertyAccessWithType(
16711- node: PropertyAccessExpression | QualifiedName,
16712- left: LeftHandSideExpression | QualifiedName,
16719+ node: PropertyAccessExpression | QualifiedName | ImportTypeNode ,
16720+ left: LeftHandSideExpression | QualifiedName | ImportTypeNode ,
1671316721 propertyName: __String,
1671416722 type: Type): boolean {
1671516723
0 commit comments