diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 6f459770912..fe471ba7002 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1,4 +1,4 @@ -/// +/// /// /* @internal */ @@ -284,6 +284,7 @@ namespace ts { let deferredGlobalAsyncIterableIteratorType: GenericType; let deferredGlobalTemplateStringsArrayType: ObjectType; let deferredJsxElementClassType: Type; + let deferredGlobalPromiseAnyType: Type; let deferredNodes: Node[]; let deferredUnusedIdentifierNodes: Node[]; @@ -3455,6 +3456,11 @@ namespace ts { // Use the type of the initializer expression if one is present if (declaration.initializer) { const type = checkDeclarationInitializer(declaration); + + if (isImportCall(declaration.initializer)) { + if (noImplicitAny && type === getGlobalPromiseAnyType()) { + error(declaration, Diagnostics.Cannot_resolve_dynamic_import_implicitly_has_a_Promise_any_type); } + } return addOptionality(type, /*optional*/ declaration.questionToken && includeOptionality); } @@ -6083,6 +6089,10 @@ namespace ts { return deferredGlobalPromiseType || (deferredGlobalPromiseType = getGlobalType("Promise", /*arity*/ 1, reportErrors)) || emptyGenericType; } + function getGlobalPromiseAnyType() { + return deferredGlobalPromiseAnyType || (deferredGlobalPromiseAnyType = createPromiseType(anyType)); + } + function getGlobalPromiseConstructorSymbol(reportErrors: boolean): Symbol | undefined { return deferredGlobalPromiseConstructorSymbol || (deferredGlobalPromiseConstructorSymbol = getGlobalValueSymbol("Promise", reportErrors)); } @@ -14897,9 +14907,6 @@ namespace ts { return createPromiseReturnType(node, getTypeOfSymbol(esModuleSymbol)); } } - if (noImplicitAny) { - error(node, Diagnostics.Cannot_resolve_dynamic_import_implicitly_has_a_Promise_any_type); - } return createPromiseReturnType(node, anyType); }