diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 61f31d7390754..24beea327cd18 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -6510,7 +6510,8 @@ namespace ts { } function isNamespaceMember(p: Symbol) { - return !(p.flags & SymbolFlags.Prototype || p.escapedName === "prototype" || p.valueDeclaration && isClassLike(p.valueDeclaration.parent)); + return !!(p.flags & (SymbolFlags.Type | SymbolFlags.Namespace | SymbolFlags.Alias)) || + !(p.flags & SymbolFlags.Prototype || p.escapedName === "prototype" || p.valueDeclaration && isClassLike(p.valueDeclaration.parent)); } function serializeAsClass(symbol: Symbol, localName: string, modifierFlags: ModifierFlags) { diff --git a/tests/baselines/reference/jsDeclarationsClassStaticMethodAugmentation.js b/tests/baselines/reference/jsDeclarationsClassStaticMethodAugmentation.js new file mode 100644 index 0000000000000..2640672f16485 --- /dev/null +++ b/tests/baselines/reference/jsDeclarationsClassStaticMethodAugmentation.js @@ -0,0 +1,30 @@ +//// [source.js] +export class Clazz { + static method() { } +} + +Clazz.method.prop = 5; + +//// [source.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Clazz = void 0; +var Clazz = /** @class */ (function () { + function Clazz() { + } + Clazz.method = function () { }; + return Clazz; +}()); +exports.Clazz = Clazz; +Clazz.method.prop = 5; + + +//// [source.d.ts] +export class Clazz { +} +export namespace Clazz { + function method(): void; + namespace method { + const prop: number; + } +} diff --git a/tests/baselines/reference/jsDeclarationsClassStaticMethodAugmentation.symbols b/tests/baselines/reference/jsDeclarationsClassStaticMethodAugmentation.symbols new file mode 100644 index 0000000000000..2e9295a8a99a0 --- /dev/null +++ b/tests/baselines/reference/jsDeclarationsClassStaticMethodAugmentation.symbols @@ -0,0 +1,15 @@ +=== tests/cases/conformance/jsdoc/declarations/source.js === +export class Clazz { +>Clazz : Symbol(Clazz, Decl(source.js, 0, 0), Decl(source.js, 2, 1)) + + static method() { } +>method : Symbol(Clazz.method, Decl(source.js, 0, 20), Decl(source.js, 4, 6)) +} + +Clazz.method.prop = 5; +>Clazz.method.prop : Symbol(Clazz.method.prop, Decl(source.js, 2, 1)) +>Clazz.method : Symbol(Clazz.method, Decl(source.js, 0, 20), Decl(source.js, 4, 6)) +>Clazz : Symbol(Clazz, Decl(source.js, 0, 0), Decl(source.js, 2, 1)) +>method : Symbol(Clazz.method, Decl(source.js, 0, 20), Decl(source.js, 4, 6)) +>prop : Symbol(Clazz.method.prop, Decl(source.js, 2, 1)) + diff --git a/tests/baselines/reference/jsDeclarationsClassStaticMethodAugmentation.types b/tests/baselines/reference/jsDeclarationsClassStaticMethodAugmentation.types new file mode 100644 index 0000000000000..ddb6dc85da6e1 --- /dev/null +++ b/tests/baselines/reference/jsDeclarationsClassStaticMethodAugmentation.types @@ -0,0 +1,17 @@ +=== tests/cases/conformance/jsdoc/declarations/source.js === +export class Clazz { +>Clazz : Clazz + + static method() { } +>method : typeof Clazz.method +} + +Clazz.method.prop = 5; +>Clazz.method.prop = 5 : 5 +>Clazz.method.prop : number +>Clazz.method : typeof Clazz.method +>Clazz : typeof Clazz +>method : typeof Clazz.method +>prop : number +>5 : 5 + diff --git a/tests/cases/conformance/jsdoc/declarations/jsDeclarationsClassStaticMethodAugmentation.ts b/tests/cases/conformance/jsdoc/declarations/jsDeclarationsClassStaticMethodAugmentation.ts new file mode 100644 index 0000000000000..ff8b56c3ec2fd --- /dev/null +++ b/tests/cases/conformance/jsdoc/declarations/jsDeclarationsClassStaticMethodAugmentation.ts @@ -0,0 +1,11 @@ +// @allowJs: true +// @checkJs: true +// @target: es5 +// @outDir: ./out +// @declaration: true +// @filename: source.js +export class Clazz { + static method() { } +} + +Clazz.method.prop = 5; \ No newline at end of file