Skip to content

Commit 645a505

Browse files
committed
feat(37092): improve error message about missing default export
1 parent 7a82b74 commit 645a505

File tree

4 files changed

+32
-12
lines changed

4 files changed

+32
-12
lines changed

src/compiler/checker.ts

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2378,18 +2378,7 @@ namespace ts {
23782378
));
23792379
}
23802380
else {
2381-
if (moduleSymbol.exports && moduleSymbol.exports.has(node.symbol.escapedName)) {
2382-
error(
2383-
node.name,
2384-
Diagnostics.Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead,
2385-
symbolToString(moduleSymbol),
2386-
symbolToString(node.symbol),
2387-
);
2388-
}
2389-
else {
2390-
error(node.name, Diagnostics.Module_0_has_no_default_export, symbolToString(moduleSymbol));
2391-
}
2392-
2381+
reportNonDefaultExport(moduleSymbol, node);
23932382
}
23942383
}
23952384
else if (hasSyntheticDefault) {
@@ -2403,6 +2392,27 @@ namespace ts {
24032392
}
24042393
}
24052394

2395+
function reportNonDefaultExport(moduleSymbol: Symbol, node: ImportClause) {
2396+
if (moduleSymbol.exports?.has(node.symbol.escapedName)) {
2397+
error(
2398+
node.name,
2399+
Diagnostics.Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead,
2400+
symbolToString(moduleSymbol),
2401+
symbolToString(node.symbol),
2402+
);
2403+
}
2404+
else {
2405+
const diagnostic = error(node.name, Diagnostics.Module_0_has_no_default_export, symbolToString(moduleSymbol));
2406+
const exportStar = moduleSymbol.exports?.get(InternalSymbolName.ExportStar);
2407+
if (exportStar) {
2408+
addRelatedInfo(diagnostic,
2409+
...map(exportStar.declarations, decl =>
2410+
createDiagnosticForNode(decl, Diagnostics._0_does_not_create_a_default_export, getTextOfNode(decl)))
2411+
);
2412+
}
2413+
}
2414+
}
2415+
24062416
function getTargetOfNamespaceImport(node: NamespaceImport, dontResolveAlias: boolean): Symbol | undefined {
24072417
const moduleSpecifier = node.parent.parent.moduleSpecifier;
24082418
const immediate = resolveExternalModuleName(node, moduleSpecifier);

src/compiler/diagnosticMessages.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,10 @@
611611
"category": "Error",
612612
"code": 1194
613613
},
614+
"'{0}' does not create a default export.": {
615+
"category": "Error",
616+
"code": 1195
617+
},
614618
"Catch clause variable cannot have a type annotation.": {
615619
"category": "Error",
616620
"code": 1196

tests/baselines/reference/exportStar-amd.errors.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ tests/cases/conformance/es6/modules/t4.ts(3,1): error TS2308: Module "./t1" has
3030
import hello, { x, y, z, foo } from "./t4";
3131
~~~~~
3232
!!! error TS1192: Module '"tests/cases/conformance/es6/modules/t4"' has no default export.
33+
!!! related TS1195 tests/cases/conformance/es6/modules/t4.ts:1:1: 'export * from "./t1";' does not create a default export.
34+
!!! related TS1195 tests/cases/conformance/es6/modules/t4.ts:2:1: 'export * from "./t2";' does not create a default export.
35+
!!! related TS1195 tests/cases/conformance/es6/modules/t4.ts:3:1: 'export * from "./t3";' does not create a default export.
3336
hello;
3437
x;
3538
y;

tests/baselines/reference/exportStar.errors.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ tests/cases/conformance/es6/modules/t4.ts(3,1): error TS2308: Module "./t1" has
3030
import hello, { x, y, z, foo } from "./t4";
3131
~~~~~
3232
!!! error TS1192: Module '"tests/cases/conformance/es6/modules/t4"' has no default export.
33+
!!! related TS1195 tests/cases/conformance/es6/modules/t4.ts:1:1: 'export * from "./t1";' does not create a default export.
34+
!!! related TS1195 tests/cases/conformance/es6/modules/t4.ts:2:1: 'export * from "./t2";' does not create a default export.
35+
!!! related TS1195 tests/cases/conformance/es6/modules/t4.ts:3:1: 'export * from "./t3";' does not create a default export.
3336
hello;
3437
x;
3538
y;

0 commit comments

Comments
 (0)