diff --git a/src/services/completions.ts b/src/services/completions.ts index 535f6f4f745..d8bd2c705e8 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -1653,8 +1653,8 @@ namespace ts.Completions { if (!(classElementModifierFlags & ModifierFlags.Private)) { // List of property symbols of base type that are not private and already implemented const baseSymbols = flatMap(getAllSuperTypeNodes(decl), baseTypeNode => { - const type = typeChecker.getTypeAtLocation(baseTypeNode)!; // TODO: GH#18217 - return typeChecker.getPropertiesOfType(classElementModifierFlags & ModifierFlags.Static ? typeChecker.getTypeOfSymbolAtLocation(type.symbol, decl) : type); + const type = typeChecker.getTypeAtLocation(baseTypeNode); + return type && typeChecker.getPropertiesOfType(classElementModifierFlags & ModifierFlags.Static ? typeChecker.getTypeOfSymbolAtLocation(type.symbol, decl) : type); }); symbols = filterClassMembersList(baseSymbols, decl.members, classElementModifierFlags); } diff --git a/tests/cases/fourslash/completionListClassMembersWithSuperClassFromUnknownNamespace.ts b/tests/cases/fourslash/completionListClassMembersWithSuperClassFromUnknownNamespace.ts new file mode 100644 index 00000000000..8e6aab7394b --- /dev/null +++ b/tests/cases/fourslash/completionListClassMembersWithSuperClassFromUnknownNamespace.ts @@ -0,0 +1,9 @@ +/// + +////class Child extends Namespace.Parent { +//// /**/ +////} + +goTo.marker(""); +verify.completionListContainsClassElementKeywords(); +verify.completionListCount(verify.allowedClassElementKeywords.length); \ No newline at end of file