diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 16cefb006e408..ec5d1961f1a1c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4022,7 +4022,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } function isSyntacticDefault(node: Node) { - return ((isExportAssignment(node) && !node.isExportEquals) || hasSyntacticModifier(node, ModifierFlags.Default) || isExportSpecifier(node)); + return ((isExportAssignment(node) && !node.isExportEquals) + || hasSyntacticModifier(node, ModifierFlags.Default) + || isExportSpecifier(node) + || isNamespaceExport(node)); } function getUsageModeForExpression(usage: Expression) { diff --git a/tests/baselines/reference/exportAsNamespace5.js b/tests/baselines/reference/exportAsNamespace5.js new file mode 100644 index 0000000000000..3d3e967ec0f1c --- /dev/null +++ b/tests/baselines/reference/exportAsNamespace5.js @@ -0,0 +1,18 @@ +//// [tests/cases/conformance/es2020/modules/exportAsNamespace5.ts] //// + +//// [three.d.ts] +export type Named = 0; +declare const Named: 0; + +//// [two.d.ts] +export * as default from "./three"; + +//// [one.ts] +import ns from "./two"; +type Alias = ns.Named; +ns.Named; + + +//// [one.js] +import ns from "./two"; +ns.Named; diff --git a/tests/baselines/reference/exportAsNamespace5.symbols b/tests/baselines/reference/exportAsNamespace5.symbols new file mode 100644 index 0000000000000..8c5ffa528963d --- /dev/null +++ b/tests/baselines/reference/exportAsNamespace5.symbols @@ -0,0 +1,27 @@ +//// [tests/cases/conformance/es2020/modules/exportAsNamespace5.ts] //// + +=== three.d.ts === +export type Named = 0; +>Named : Symbol(Named, Decl(three.d.ts, 0, 0), Decl(three.d.ts, 1, 13)) + +declare const Named: 0; +>Named : Symbol(Named, Decl(three.d.ts, 0, 0), Decl(three.d.ts, 1, 13)) + +=== two.d.ts === +export * as default from "./three"; +>default : Symbol(default, Decl(two.d.ts, 0, 6)) + +=== one.ts === +import ns from "./two"; +>ns : Symbol(ns, Decl(one.ts, 0, 6)) + +type Alias = ns.Named; +>Alias : Symbol(Alias, Decl(one.ts, 0, 23)) +>ns : Symbol(ns, Decl(one.ts, 0, 6)) +>Named : Symbol(ns.Named, Decl(three.d.ts, 0, 0), Decl(three.d.ts, 1, 13)) + +ns.Named; +>ns.Named : Symbol(ns.Named, Decl(three.d.ts, 0, 0), Decl(three.d.ts, 1, 13)) +>ns : Symbol(ns, Decl(one.ts, 0, 6)) +>Named : Symbol(ns.Named, Decl(three.d.ts, 0, 0), Decl(three.d.ts, 1, 13)) + diff --git a/tests/baselines/reference/exportAsNamespace5.types b/tests/baselines/reference/exportAsNamespace5.types new file mode 100644 index 0000000000000..a2850b11f16b4 --- /dev/null +++ b/tests/baselines/reference/exportAsNamespace5.types @@ -0,0 +1,26 @@ +//// [tests/cases/conformance/es2020/modules/exportAsNamespace5.ts] //// + +=== three.d.ts === +export type Named = 0; +>Named : 0 + +declare const Named: 0; +>Named : 0 + +=== two.d.ts === +export * as default from "./three"; +>default : typeof import("three") + +=== one.ts === +import ns from "./two"; +>ns : typeof ns + +type Alias = ns.Named; +>Alias : 0 +>ns : any + +ns.Named; +>ns.Named : 0 +>ns : typeof ns +>Named : 0 + diff --git a/tests/cases/conformance/es2020/modules/exportAsNamespace5.ts b/tests/cases/conformance/es2020/modules/exportAsNamespace5.ts new file mode 100644 index 0000000000000..982e299b0ed97 --- /dev/null +++ b/tests/cases/conformance/es2020/modules/exportAsNamespace5.ts @@ -0,0 +1,14 @@ +// @module: esnext +// @moduleResolution: bundler + +// @filename: three.d.ts +export type Named = 0; +declare const Named: 0; + +// @filename: two.d.ts +export * as default from "./three"; + +// @filename: one.ts +import ns from "./two"; +type Alias = ns.Named; +ns.Named;