(node)
| 62754 | } |
| 62755 | } |
| 62756 | function getTypeFromImportTypeNode(node) { |
| 62757 | var links = getNodeLinks(node); |
| 62758 | if (!links.resolvedType) { |
| 62759 | if (node.isTypeOf && node.typeArguments) { // Only the non-typeof form can make use of type arguments |
| 62760 | error(node, ts.Diagnostics.Type_arguments_cannot_be_used_here); |
| 62761 | links.resolvedSymbol = unknownSymbol; |
| 62762 | return links.resolvedType = errorType; |
| 62763 | } |
| 62764 | if (!ts.isLiteralImportTypeNode(node)) { |
| 62765 | error(node.argument, ts.Diagnostics.String_literal_expected); |
| 62766 | links.resolvedSymbol = unknownSymbol; |
| 62767 | return links.resolvedType = errorType; |
| 62768 | } |
| 62769 | var targetMeaning = node.isTypeOf ? 111551 /* SymbolFlags.Value */ : node.flags & 8388608 /* NodeFlags.JSDoc */ ? 111551 /* SymbolFlags.Value */ | 788968 /* SymbolFlags.Type */ : 788968 /* SymbolFlags.Type */; |
| 62770 | // TODO: Future work: support unions/generics/whatever via a deferred import-type |
| 62771 | var innerModuleSymbol = resolveExternalModuleName(node, node.argument.literal); |
| 62772 | if (!innerModuleSymbol) { |
| 62773 | links.resolvedSymbol = unknownSymbol; |
| 62774 | return links.resolvedType = errorType; |
| 62775 | } |
| 62776 | var moduleSymbol = resolveExternalModuleSymbol(innerModuleSymbol, /*dontResolveAlias*/ false); |
| 62777 | if (!ts.nodeIsMissing(node.qualifier)) { |
| 62778 | var nameStack = getIdentifierChain(node.qualifier); |
| 62779 | var currentNamespace = moduleSymbol; |
| 62780 | var current = void 0; |
| 62781 | while (current = nameStack.shift()) { |
| 62782 | var meaning = nameStack.length ? 1920 /* SymbolFlags.Namespace */ : targetMeaning; |
| 62783 | // typeof a.b.c is normally resolved using `checkExpression` which in turn defers to `checkQualifiedName` |
| 62784 | // That, in turn, ultimately uses `getPropertyOfType` on the type of the symbol, which differs slightly from |
| 62785 | // the `exports` lookup process that only looks up namespace members which is used for most type references |
| 62786 | var mergedResolvedSymbol = getMergedSymbol(resolveSymbol(currentNamespace)); |
| 62787 | var next = node.isTypeOf |
| 62788 | ? getPropertyOfType(getTypeOfSymbol(mergedResolvedSymbol), current.escapedText) |
| 62789 | : getSymbol(getExportsOfSymbol(mergedResolvedSymbol), current.escapedText, meaning); |
| 62790 | if (!next) { |
| 62791 | error(current, ts.Diagnostics.Namespace_0_has_no_exported_member_1, getFullyQualifiedName(currentNamespace), ts.declarationNameToString(current)); |
| 62792 | return links.resolvedType = errorType; |
| 62793 | } |
| 62794 | getNodeLinks(current).resolvedSymbol = next; |
| 62795 | getNodeLinks(current.parent).resolvedSymbol = next; |
| 62796 | currentNamespace = next; |
| 62797 | } |
| 62798 | links.resolvedType = resolveImportSymbolType(node, links, currentNamespace, targetMeaning); |
| 62799 | } |
| 62800 | else { |
| 62801 | if (moduleSymbol.flags & targetMeaning) { |
| 62802 | links.resolvedType = resolveImportSymbolType(node, links, moduleSymbol, targetMeaning); |
| 62803 | } |
| 62804 | else { |
| 62805 | var errorMessage = targetMeaning === 111551 /* SymbolFlags.Value */ |
| 62806 | ? ts.Diagnostics.Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here |
| 62807 | : ts.Diagnostics.Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0; |
| 62808 | error(node, errorMessage, node.argument.literal.text); |
| 62809 | links.resolvedSymbol = unknownSymbol; |
| 62810 | links.resolvedType = errorType; |
| 62811 | } |
| 62812 | } |
| 62813 | } |
no test coverage detected
searching dependent graphs…