Skip to content

Commit f8503f2

Browse files
authored
Include export specifiers in the list of syntactic defaults (#24549)
1 parent 7e249ce commit f8503f2

File tree

5 files changed

+77
-1
lines changed

5 files changed

+77
-1
lines changed

src/compiler/checker.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1784,7 +1784,7 @@ namespace ts {
17841784
}
17851785

17861786
function isSyntacticDefault(node: Node) {
1787-
return ((isExportAssignment(node) && !node.isExportEquals) || hasModifier(node, ModifierFlags.Default));
1787+
return ((isExportAssignment(node) && !node.isExportEquals) || hasModifier(node, ModifierFlags.Default) || isExportSpecifier(node));
17881788
}
17891789

17901790
function canHaveSyntheticDefault(file: SourceFile | undefined, moduleSymbol: Symbol, dontResolveAlias: boolean) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
//// [tests/cases/compiler/reexportDefaultIsCallable.ts] ////
2+
3+
//// [schema.d.ts]
4+
export default class Schema {}
5+
//// [reexporter.d.ts]
6+
export { default } from "./schema";
7+
//// [usage.ts]
8+
import Base from "./reexporter";
9+
export default class Mine extends Base {}
10+
11+
12+
//// [usage.js]
13+
"use strict";
14+
var __extends = (this && this.__extends) || (function () {
15+
var extendStatics = Object.setPrototypeOf ||
16+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
17+
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
18+
return function (d, b) {
19+
extendStatics(d, b);
20+
function __() { this.constructor = d; }
21+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
22+
};
23+
})();
24+
var __importDefault = (this && this.__importDefault) || function (mod) {
25+
return (mod && mod.__esModule) ? mod : { "default": mod };
26+
};
27+
exports.__esModule = true;
28+
var reexporter_1 = __importDefault(require("./reexporter"));
29+
var Mine = /** @class */ (function (_super) {
30+
__extends(Mine, _super);
31+
function Mine() {
32+
return _super !== null && _super.apply(this, arguments) || this;
33+
}
34+
return Mine;
35+
}(reexporter_1["default"]));
36+
exports["default"] = Mine;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
=== tests/cases/compiler/schema.d.ts ===
2+
export default class Schema {}
3+
>Schema : Symbol(Schema, Decl(schema.d.ts, 0, 0))
4+
5+
=== tests/cases/compiler/reexporter.d.ts ===
6+
export { default } from "./schema";
7+
>default : Symbol(default, Decl(reexporter.d.ts, 0, 8))
8+
9+
=== tests/cases/compiler/usage.ts ===
10+
import Base from "./reexporter";
11+
>Base : Symbol(Base, Decl(usage.ts, 0, 6))
12+
13+
export default class Mine extends Base {}
14+
>Mine : Symbol(Mine, Decl(usage.ts, 0, 32))
15+
>Base : Symbol(Base, Decl(usage.ts, 0, 6))
16+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
=== tests/cases/compiler/schema.d.ts ===
2+
export default class Schema {}
3+
>Schema : Schema
4+
5+
=== tests/cases/compiler/reexporter.d.ts ===
6+
export { default } from "./schema";
7+
>default : typeof import("tests/cases/compiler/schema").default
8+
9+
=== tests/cases/compiler/usage.ts ===
10+
import Base from "./reexporter";
11+
>Base : typeof Base
12+
13+
export default class Mine extends Base {}
14+
>Mine : Mine
15+
>Base : Base
16+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// @esModuleInterop: true
2+
// @filename: schema.d.ts
3+
export default class Schema {}
4+
// @filename: reexporter.d.ts
5+
export { default } from "./schema";
6+
// @filename: usage.ts
7+
import Base from "./reexporter";
8+
export default class Mine extends Base {}

0 commit comments

Comments
 (0)