Skip to content

Commit 21109b7

Browse files
authored
Recognize export * as default as a syntactic default export for synthetic default detection (#55985)
1 parent e9f68cb commit 21109b7

File tree

5 files changed

+89
-1
lines changed

5 files changed

+89
-1
lines changed

src/compiler/checker.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -4022,7 +4022,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
40224022
}
40234023

40244024
function isSyntacticDefault(node: Node) {
4025-
return ((isExportAssignment(node) && !node.isExportEquals) || hasSyntacticModifier(node, ModifierFlags.Default) || isExportSpecifier(node));
4025+
return ((isExportAssignment(node) && !node.isExportEquals)
4026+
|| hasSyntacticModifier(node, ModifierFlags.Default)
4027+
|| isExportSpecifier(node)
4028+
|| isNamespaceExport(node));
40264029
}
40274030

40284031
function getUsageModeForExpression(usage: Expression) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//// [tests/cases/conformance/es2020/modules/exportAsNamespace5.ts] ////
2+
3+
//// [three.d.ts]
4+
export type Named = 0;
5+
declare const Named: 0;
6+
7+
//// [two.d.ts]
8+
export * as default from "./three";
9+
10+
//// [one.ts]
11+
import ns from "./two";
12+
type Alias = ns.Named;
13+
ns.Named;
14+
15+
16+
//// [one.js]
17+
import ns from "./two";
18+
ns.Named;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//// [tests/cases/conformance/es2020/modules/exportAsNamespace5.ts] ////
2+
3+
=== three.d.ts ===
4+
export type Named = 0;
5+
>Named : Symbol(Named, Decl(three.d.ts, 0, 0), Decl(three.d.ts, 1, 13))
6+
7+
declare const Named: 0;
8+
>Named : Symbol(Named, Decl(three.d.ts, 0, 0), Decl(three.d.ts, 1, 13))
9+
10+
=== two.d.ts ===
11+
export * as default from "./three";
12+
>default : Symbol(default, Decl(two.d.ts, 0, 6))
13+
14+
=== one.ts ===
15+
import ns from "./two";
16+
>ns : Symbol(ns, Decl(one.ts, 0, 6))
17+
18+
type Alias = ns.Named;
19+
>Alias : Symbol(Alias, Decl(one.ts, 0, 23))
20+
>ns : Symbol(ns, Decl(one.ts, 0, 6))
21+
>Named : Symbol(ns.Named, Decl(three.d.ts, 0, 0), Decl(three.d.ts, 1, 13))
22+
23+
ns.Named;
24+
>ns.Named : Symbol(ns.Named, Decl(three.d.ts, 0, 0), Decl(three.d.ts, 1, 13))
25+
>ns : Symbol(ns, Decl(one.ts, 0, 6))
26+
>Named : Symbol(ns.Named, Decl(three.d.ts, 0, 0), Decl(three.d.ts, 1, 13))
27+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//// [tests/cases/conformance/es2020/modules/exportAsNamespace5.ts] ////
2+
3+
=== three.d.ts ===
4+
export type Named = 0;
5+
>Named : 0
6+
7+
declare const Named: 0;
8+
>Named : 0
9+
10+
=== two.d.ts ===
11+
export * as default from "./three";
12+
>default : typeof import("three")
13+
14+
=== one.ts ===
15+
import ns from "./two";
16+
>ns : typeof ns
17+
18+
type Alias = ns.Named;
19+
>Alias : 0
20+
>ns : any
21+
22+
ns.Named;
23+
>ns.Named : 0
24+
>ns : typeof ns
25+
>Named : 0
26+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// @module: esnext
2+
// @moduleResolution: bundler
3+
4+
// @filename: three.d.ts
5+
export type Named = 0;
6+
declare const Named: 0;
7+
8+
// @filename: two.d.ts
9+
export * as default from "./three";
10+
11+
// @filename: one.ts
12+
import ns from "./two";
13+
type Alias = ns.Named;
14+
ns.Named;

0 commit comments

Comments
 (0)