diff --git a/CHANGELOG.md b/CHANGELOG.md index d44fa3a9e..86817fd4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -89,6 +89,7 @@ title: Changelog - TypeDoc can now link to type alias properties, #2524. - TypeDoc will now document the merged symbol type when considering globals declared inside `declare global`, #2774 +- TypeDoc now converts `declare module "foo"` as a module rather than a namespace, #2778. - Fixed an issue where properties were not properly marked optional in some cases. This primarily affected destructured parameters. - Added `yaml` to the highlight languages supported by default. diff --git a/src/lib/converter/symbols.ts b/src/lib/converter/symbols.ts index ee6f3a9cc..73a22a012 100644 --- a/src/lib/converter/symbols.ts +++ b/src/lib/converter/symbols.ts @@ -287,10 +287,24 @@ function convertNamespace( if (existingReflection?.kind === ReflectionKind.Namespace) { reflection = existingReflection as DeclarationReflection; } else { + let kind = ReflectionKind.Namespace; + let nameOverride: string | undefined; + + // #2778 - always treat declare module "foo" as a module, not a namespace + const declareModule = symbol.declarations?.find( + (mod): mod is ts.ModuleDeclaration => + ts.isModuleDeclaration(mod) && ts.isStringLiteral(mod.name), + ); + if (declareModule) { + kind = ReflectionKind.Module; + nameOverride = declareModule.name.text; + } + reflection = context.createDeclarationReflection( - ReflectionKind.Namespace, + kind, symbol, exportSymbol, + nameOverride, ); context.finalizeDeclarationReflection(reflection); } diff --git a/src/test/converter2/issues/gh2778.ts b/src/test/converter2/issues/gh2778.ts new file mode 100644 index 000000000..0befb91d3 --- /dev/null +++ b/src/test/converter2/issues/gh2778.ts @@ -0,0 +1,11 @@ +declare module "common" { + export class Base {} +} +declare module "foo/bar1" { + import { Base } from "common"; + export class Bar1 extends Base {} +} +declare module "foo/bar2" { + import { Base } from "common"; + export class Bar2 extends Base {} +} diff --git a/src/test/issues.c2.test.ts b/src/test/issues.c2.test.ts index faaf6efed..f2e0cfcfd 100644 --- a/src/test/issues.c2.test.ts +++ b/src/test/issues.c2.test.ts @@ -1908,4 +1908,20 @@ describe("Issue Tests", () => { ["Extensions"], ); }); + + it("#2778 creates modules for declare module blocks", () => { + const project = convert(); + equal( + project.children?.map((c) => c.name), + ["common", "foo/bar1", "foo/bar2"], + ); + equal( + project.children.map((c) => c.kind), + [ + ReflectionKind.Module, + ReflectionKind.Module, + ReflectionKind.Module, + ], + ); + }); });