diff --git a/src/compiler/transformers/declarations.ts b/src/compiler/transformers/declarations.ts index bfbd4d44712..3a3e237c5ea 100644 --- a/src/compiler/transformers/declarations.ts +++ b/src/compiler/transformers/declarations.ts @@ -1163,6 +1163,9 @@ namespace ts { } function transformTopLevelDeclaration(input: LateVisibilityPaintedStatement) { + if (lateMarkedStatements) { + while (orderedRemoveItem(lateMarkedStatements, input)); + } if (shouldStripInternal(input)) return; switch (input.kind) { case SyntaxKind.ImportEqualsDeclaration: { diff --git a/tests/baselines/reference/declarationEmitNamespaceMergedWithInterfaceNestedFunction.js b/tests/baselines/reference/declarationEmitNamespaceMergedWithInterfaceNestedFunction.js new file mode 100644 index 00000000000..19319bc28e3 --- /dev/null +++ b/tests/baselines/reference/declarationEmitNamespaceMergedWithInterfaceNestedFunction.js @@ -0,0 +1,38 @@ +//// [declarationEmitNamespaceMergedWithInterfaceNestedFunction.ts] +export interface Foo { + item: Bar; +} + +interface Bar { + baz(): void; +} + +namespace Bar { + export function biz() { + return 0; + } +} + +//// [declarationEmitNamespaceMergedWithInterfaceNestedFunction.js] +"use strict"; +exports.__esModule = true; +var Bar; +(function (Bar) { + function biz() { + return 0; + } + Bar.biz = biz; +})(Bar || (Bar = {})); + + +//// [declarationEmitNamespaceMergedWithInterfaceNestedFunction.d.ts] +export interface Foo { + item: Bar; +} +interface Bar { + baz(): void; +} +declare namespace Bar { + function biz(): number; +} +export {}; diff --git a/tests/baselines/reference/declarationEmitNamespaceMergedWithInterfaceNestedFunction.symbols b/tests/baselines/reference/declarationEmitNamespaceMergedWithInterfaceNestedFunction.symbols new file mode 100644 index 00000000000..45afcfb0df0 --- /dev/null +++ b/tests/baselines/reference/declarationEmitNamespaceMergedWithInterfaceNestedFunction.symbols @@ -0,0 +1,25 @@ +=== tests/cases/compiler/declarationEmitNamespaceMergedWithInterfaceNestedFunction.ts === +export interface Foo { +>Foo : Symbol(Foo, Decl(declarationEmitNamespaceMergedWithInterfaceNestedFunction.ts, 0, 0)) + + item: Bar; +>item : Symbol(Foo.item, Decl(declarationEmitNamespaceMergedWithInterfaceNestedFunction.ts, 0, 22)) +>Bar : Symbol(Bar, Decl(declarationEmitNamespaceMergedWithInterfaceNestedFunction.ts, 2, 1), Decl(declarationEmitNamespaceMergedWithInterfaceNestedFunction.ts, 6, 1)) +} + +interface Bar { +>Bar : Symbol(Bar, Decl(declarationEmitNamespaceMergedWithInterfaceNestedFunction.ts, 2, 1), Decl(declarationEmitNamespaceMergedWithInterfaceNestedFunction.ts, 6, 1)) + + baz(): void; +>baz : Symbol(Bar.baz, Decl(declarationEmitNamespaceMergedWithInterfaceNestedFunction.ts, 4, 15)) +} + +namespace Bar { +>Bar : Symbol(Bar, Decl(declarationEmitNamespaceMergedWithInterfaceNestedFunction.ts, 2, 1), Decl(declarationEmitNamespaceMergedWithInterfaceNestedFunction.ts, 6, 1)) + + export function biz() { +>biz : Symbol(biz, Decl(declarationEmitNamespaceMergedWithInterfaceNestedFunction.ts, 8, 15)) + + return 0; + } +} diff --git a/tests/baselines/reference/declarationEmitNamespaceMergedWithInterfaceNestedFunction.types b/tests/baselines/reference/declarationEmitNamespaceMergedWithInterfaceNestedFunction.types new file mode 100644 index 00000000000..c6df96fb5a0 --- /dev/null +++ b/tests/baselines/reference/declarationEmitNamespaceMergedWithInterfaceNestedFunction.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/declarationEmitNamespaceMergedWithInterfaceNestedFunction.ts === +export interface Foo { + item: Bar; +>item : Bar +} + +interface Bar { + baz(): void; +>baz : () => void +} + +namespace Bar { +>Bar : typeof Bar + + export function biz() { +>biz : () => number + + return 0; +>0 : 0 + } +} diff --git a/tests/cases/compiler/declarationEmitNamespaceMergedWithInterfaceNestedFunction.ts b/tests/cases/compiler/declarationEmitNamespaceMergedWithInterfaceNestedFunction.ts new file mode 100644 index 00000000000..2de252c9b1e --- /dev/null +++ b/tests/cases/compiler/declarationEmitNamespaceMergedWithInterfaceNestedFunction.ts @@ -0,0 +1,14 @@ +// @declaration: true +export interface Foo { + item: Bar; +} + +interface Bar { + baz(): void; +} + +namespace Bar { + export function biz() { + return 0; + } +} \ No newline at end of file