diff --git a/src/services/completions.ts b/src/services/completions.ts index 8c86057da0dc6..2197df462f12a 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -3309,10 +3309,9 @@ namespace ts.Completions { /** True if symbol is a type or a module containing at least one type. */ function symbolCanBeReferencedAtTypeLocation(symbol: Symbol, checker: TypeChecker, seenModules = new Map()): boolean { const sym = skipAlias(symbol.exportSymbol || symbol, checker); - return !!(sym.flags & SymbolFlags.Type) || - !!(sym.flags & SymbolFlags.Module) && - addToSeen(seenModules, getSymbolId(sym)) && - checker.getExportsOfModule(sym).some(e => symbolCanBeReferencedAtTypeLocation(e, checker, seenModules)); + return !!(sym.flags & SymbolFlags.Type) || checker.isUnknownSymbol(sym) || + !!(sym.flags & SymbolFlags.Module) && addToSeen(seenModules, getSymbolId(sym)) && + checker.getExportsOfModule(sym).some(e => symbolCanBeReferencedAtTypeLocation(e, checker, seenModules)); } function isDeprecated(symbol: Symbol, checker: TypeChecker) { diff --git a/tests/cases/fourslash/completionsNonExistentImport.ts b/tests/cases/fourslash/completionsNonExistentImport.ts new file mode 100644 index 0000000000000..1cfc058730675 --- /dev/null +++ b/tests/cases/fourslash/completionsNonExistentImport.ts @@ -0,0 +1,9 @@ +/// + +////import { NonExistentType } from "non-existent-module"; +////let foo: /**/ + +verify.completions({ + marker: "", + includes: ["NonExistentType"] +}); diff --git a/tests/cases/fourslash/nonExistingImport.ts b/tests/cases/fourslash/nonExistingImport.ts index a06a58a14e098..ebcc989253454 100644 --- a/tests/cases/fourslash/nonExistingImport.ts +++ b/tests/cases/fourslash/nonExistingImport.ts @@ -5,4 +5,4 @@ //// var n: num/*1*/ ////} -verify.completions({ marker: "1", exact: completion.globalTypes }); +verify.completions({ marker: "1", exact: ["foo", ...completion.globalTypes] });