diff --git a/src/services/completions.ts b/src/services/completions.ts index c7310e0c8b3f0..67b9f0d94ce80 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -2012,7 +2012,9 @@ namespace ts.Completions { // 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); - return type && typeChecker.getPropertiesOfType(classElementModifierFlags & ModifierFlags.Static ? typeChecker.getTypeOfSymbolAtLocation(type.symbol, decl) : type); + return classElementModifierFlags & ModifierFlags.Static ? + type?.symbol && typeChecker.getPropertiesOfType(typeChecker.getTypeOfSymbolAtLocation(type.symbol, decl)) : + type && typeChecker.getPropertiesOfType(type); }); symbols = filterClassMembersList(baseSymbols, decl.members, classElementModifierFlags); } diff --git a/tests/cases/fourslash/completionEntryForClassMembers_StaticWhenBaseTypeIsNotResolved.ts b/tests/cases/fourslash/completionEntryForClassMembers_StaticWhenBaseTypeIsNotResolved.ts new file mode 100644 index 0000000000000..739c60dd51e27 --- /dev/null +++ b/tests/cases/fourslash/completionEntryForClassMembers_StaticWhenBaseTypeIsNotResolved.ts @@ -0,0 +1,35 @@ +/// + +// @Filename: /node_modules/@types/react/index.d.ts +//// export = React; +//// export as namespace React; +//// declare namespace React { +//// function createElement(): any; +//// interface Component

{ } +//// class Component { +//// static contextType?: any; +//// context: any; +//// constructor(props: Readonly

); +//// setState( +//// state: ((prevState: Readonly, props: Readonly

) => (Pick | S | null)) | (Pick | S | null), +//// callback?: () => void +//// ): void; +//// } +//// } + +// @Filename: /a.ts +//// import React from 'react' +//// class Slider extends React.Component { +//// static defau/**/ltProps = { +//// onMouseDown: () => { }, +//// onMouseUp: () => { }, +//// unit: 'px', +//// } +//// handleChange = () => 10; +//// } + +verify.completions({ + marker: "", + isNewIdentifierLocation: true, + exact: completion.classElementKeywords, +}); \ No newline at end of file