@@ -1099,7 +1099,7 @@ namespace ts {
1099
1099
const moduleSymbol = resolveExternalModuleName(node, (<ImportDeclaration>node.parent).moduleSpecifier);
1100
1100
1101
1101
if (moduleSymbol) {
1102
- const exportDefaultSymbol = isShorthandAmbientModuleSymbol (moduleSymbol) ?
1102
+ const exportDefaultSymbol = isUntypedOrShorthandAmbientModuleSymbol (moduleSymbol) ?
1103
1103
moduleSymbol :
1104
1104
moduleSymbol.exports["export="] ?
1105
1105
getPropertyOfType(getTypeOfSymbol(moduleSymbol.exports["export="]), "default") :
@@ -1175,7 +1175,7 @@ namespace ts {
1175
1175
if (targetSymbol) {
1176
1176
const name = specifier.propertyName || specifier.name;
1177
1177
if (name.text) {
1178
- if (isShorthandAmbientModuleSymbol (moduleSymbol)) {
1178
+ if (isUntypedOrShorthandAmbientModuleSymbol (moduleSymbol)) {
1179
1179
return moduleSymbol;
1180
1180
}
1181
1181
@@ -1427,15 +1427,19 @@ namespace ts {
1427
1427
Debug.assert(!!moduleNotFoundError);
1428
1428
const diag = Diagnostics.Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augmented;
1429
1429
error(errorNode, diag, moduleName, resolvedModule.resolvedFileName);
1430
+ return undefined;
1430
1431
}
1431
1432
else if (compilerOptions.noImplicitAny && moduleNotFoundError) {
1432
1433
error(errorNode,
1433
1434
Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type,
1434
1435
moduleReference,
1435
1436
resolvedModule.resolvedFileName);
1437
+ return undefined;
1436
1438
}
1437
- // Failed imports and untyped modules are both treated in an untyped manner; only difference is whether we give a diagnostic first.
1438
- return undefined;
1439
+ // Unlike a failed import, an untyped module produces a dummy symbol. This is checked for by `isUntypedOrShorthandAmbientModuleSymbol`.
1440
+ const untypedSymbol = createSymbol(SymbolFlags.ValueModule, `"${moduleName}"`);
1441
+ untypedSymbol.exports = createMap<Symbol>();
1442
+ return untypedSymbol;
1439
1443
}
1440
1444
1441
1445
if (moduleNotFoundError) {
@@ -3575,7 +3579,7 @@ namespace ts {
3575
3579
function getTypeOfFuncClassEnumModule(symbol: Symbol): Type {
3576
3580
const links = getSymbolLinks(symbol);
3577
3581
if (!links.type) {
3578
- if (symbol.flags & SymbolFlags.Module && isShorthandAmbientModuleSymbol (symbol)) {
3582
+ if (symbol.flags & SymbolFlags.Module && isUntypedOrShorthandAmbientModuleSymbol (symbol)) {
3579
3583
links.type = anyType;
3580
3584
}
3581
3585
else {
@@ -19610,7 +19614,7 @@ namespace ts {
19610
19614
19611
19615
function moduleExportsSomeValue(moduleReferenceExpression: Expression): boolean {
19612
19616
let moduleSymbol = resolveExternalModuleName(moduleReferenceExpression.parent, moduleReferenceExpression);
19613
- if (!moduleSymbol || isShorthandAmbientModuleSymbol (moduleSymbol)) {
19617
+ if (!moduleSymbol || isUntypedOrShorthandAmbientModuleSymbol (moduleSymbol)) {
19614
19618
// If the module is not found or is shorthand, assume that it may export a value.
19615
19619
return true;
19616
19620
}
0 commit comments