Skip to content

Commit daf786e

Browse files
a-tarasyukweswigham
authored andcommitted
throw an error when no default export present (#35815)
1 parent 91ffa1c commit daf786e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+548
-3
lines changed

src/compiler/checker.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2322,13 +2322,18 @@ namespace ts {
23222322
else {
23232323
symbolFromVariable = getPropertyOfVariable(targetSymbol, name.escapedText);
23242324
}
2325+
23252326
// if symbolFromVariable is export - get its final target
23262327
symbolFromVariable = resolveSymbol(symbolFromVariable, dontResolveAlias);
2328+
23272329
let symbolFromModule = getExportOfModule(targetSymbol, name.escapedText, dontResolveAlias);
2328-
// If the export member we're looking for is default, and there is no real default but allowSyntheticDefaultImports is on, return the entire module as the default
2329-
if (!symbolFromModule && allowSyntheticDefaultImports && name.escapedText === InternalSymbolName.Default) {
2330-
symbolFromModule = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) || resolveSymbol(moduleSymbol, dontResolveAlias);
2330+
if (symbolFromModule === undefined && name.escapedText === InternalSymbolName.Default) {
2331+
const file = find(moduleSymbol.declarations, isSourceFile);
2332+
if (canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias)) {
2333+
symbolFromModule = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) || resolveSymbol(moduleSymbol, dontResolveAlias);
2334+
}
23312335
}
2336+
23322337
const symbol = symbolFromModule && symbolFromVariable && symbolFromModule !== symbolFromVariable ?
23332338
combineValueAndTypeSymbols(symbolFromVariable, symbolFromModule) :
23342339
symbolFromModule || symbolFromVariable;
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
tests/cases/compiler/a.ts(2,10): error TS2305: Module '"./b"' has no exported member 'default'.
2+
3+
4+
==== tests/cases/compiler/b.ts (0 errors) ====
5+
export const b = null;
6+
7+
==== tests/cases/compiler/a.ts (1 errors) ====
8+
export { b } from "./b";
9+
export { default } from "./b";
10+
~~~~~~~
11+
!!! error TS2305: Module '"./b"' has no exported member 'default'.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//// [tests/cases/compiler/reexportMissingDefault.ts] ////
2+
3+
//// [b.ts]
4+
export const b = null;
5+
6+
//// [a.ts]
7+
export { b } from "./b";
8+
export { default } from "./b";
9+
10+
//// [b.js]
11+
"use strict";
12+
exports.__esModule = true;
13+
exports.b = null;
14+
//// [a.js]
15+
"use strict";
16+
exports.__esModule = true;
17+
var b_1 = require("./b");
18+
exports.b = b_1.b;
19+
var b_2 = require("./b");
20+
exports["default"] = b_2["default"];
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
=== tests/cases/compiler/b.ts ===
2+
export const b = null;
3+
>b : Symbol(b, Decl(b.ts, 0, 12))
4+
5+
=== tests/cases/compiler/a.ts ===
6+
export { b } from "./b";
7+
>b : Symbol(b, Decl(a.ts, 0, 8))
8+
9+
export { default } from "./b";
10+
>default : Symbol(default, Decl(a.ts, 1, 8))
11+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
=== tests/cases/compiler/b.ts ===
2+
export const b = null;
3+
>b : any
4+
>null : null
5+
6+
=== tests/cases/compiler/a.ts ===
7+
export { b } from "./b";
8+
>b : any
9+
10+
export { default } from "./b";
11+
>default : any
12+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
tests/cases/compiler/a.ts(2,10): error TS2305: Module '"./b"' has no exported member 'default'.
2+
3+
4+
==== tests/cases/compiler/b.ts (0 errors) ====
5+
export const b = null;
6+
7+
==== tests/cases/compiler/a.ts (1 errors) ====
8+
export { b } from "./b";
9+
export { default } from "./b";
10+
~~~~~~~
11+
!!! error TS2305: Module '"./b"' has no exported member 'default'.
12+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//// [tests/cases/compiler/reexportMissingDefault1.ts] ////
2+
3+
//// [b.ts]
4+
export const b = null;
5+
6+
//// [a.ts]
7+
export { b } from "./b";
8+
export { default } from "./b";
9+
10+
11+
//// [b.js]
12+
"use strict";
13+
exports.__esModule = true;
14+
exports.b = null;
15+
//// [a.js]
16+
"use strict";
17+
exports.__esModule = true;
18+
var b_1 = require("./b");
19+
exports.b = b_1.b;
20+
var b_2 = require("./b");
21+
exports["default"] = b_2["default"];
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
=== tests/cases/compiler/b.ts ===
2+
export const b = null;
3+
>b : Symbol(b, Decl(b.ts, 0, 12))
4+
5+
=== tests/cases/compiler/a.ts ===
6+
export { b } from "./b";
7+
>b : Symbol(b, Decl(a.ts, 0, 8))
8+
9+
export { default } from "./b";
10+
>default : Symbol(default, Decl(a.ts, 1, 8))
11+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
=== tests/cases/compiler/b.ts ===
2+
export const b = null;
3+
>b : any
4+
>null : null
5+
6+
=== tests/cases/compiler/a.ts ===
7+
export { b } from "./b";
8+
>b : any
9+
10+
export { default } from "./b";
11+
>default : any
12+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
tests/cases/compiler/a.ts(2,10): error TS2305: Module '"./b"' has no exported member 'default'.
2+
3+
4+
==== tests/cases/compiler/b.ts (0 errors) ====
5+
export const b = null;
6+
7+
==== tests/cases/compiler/a.ts (1 errors) ====
8+
export { b } from "./b";
9+
export { default } from "./b";
10+
~~~~~~~
11+
!!! error TS2305: Module '"./b"' has no exported member 'default'.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//// [tests/cases/compiler/reexportMissingDefault2.ts] ////
2+
3+
//// [b.ts]
4+
export const b = null;
5+
6+
//// [a.ts]
7+
export { b } from "./b";
8+
export { default } from "./b";
9+
10+
//// [b.js]
11+
"use strict";
12+
exports.__esModule = true;
13+
exports.b = null;
14+
//// [a.js]
15+
"use strict";
16+
exports.__esModule = true;
17+
var b_1 = require("./b");
18+
exports.b = b_1.b;
19+
var b_2 = require("./b");
20+
exports["default"] = b_2["default"];
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
=== tests/cases/compiler/b.ts ===
2+
export const b = null;
3+
>b : Symbol(b, Decl(b.ts, 0, 12))
4+
5+
=== tests/cases/compiler/a.ts ===
6+
export { b } from "./b";
7+
>b : Symbol(b, Decl(a.ts, 0, 8))
8+
9+
export { default } from "./b";
10+
>default : Symbol(default, Decl(a.ts, 1, 8))
11+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
=== tests/cases/compiler/b.ts ===
2+
export const b = null;
3+
>b : any
4+
>null : null
5+
6+
=== tests/cases/compiler/a.ts ===
7+
export { b } from "./b";
8+
>b : any
9+
10+
export { default } from "./b";
11+
>default : any
12+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
tests/cases/compiler/a.ts(2,10): error TS2305: Module '"./b"' has no exported member 'default'.
2+
3+
4+
==== tests/cases/compiler/b.ts (0 errors) ====
5+
export const b = null;
6+
7+
==== tests/cases/compiler/a.ts (1 errors) ====
8+
export { b } from "./b";
9+
export { default as a } from "./b";
10+
~~~~~~~
11+
!!! error TS2305: Module '"./b"' has no exported member 'default'.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//// [tests/cases/compiler/reexportMissingDefault3.ts] ////
2+
3+
//// [b.ts]
4+
export const b = null;
5+
6+
//// [a.ts]
7+
export { b } from "./b";
8+
export { default as a } from "./b";
9+
10+
//// [b.js]
11+
"use strict";
12+
exports.__esModule = true;
13+
exports.b = null;
14+
//// [a.js]
15+
"use strict";
16+
exports.__esModule = true;
17+
var b_1 = require("./b");
18+
exports.b = b_1.b;
19+
var b_2 = require("./b");
20+
exports.a = b_2["default"];
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
=== tests/cases/compiler/b.ts ===
2+
export const b = null;
3+
>b : Symbol(b, Decl(b.ts, 0, 12))
4+
5+
=== tests/cases/compiler/a.ts ===
6+
export { b } from "./b";
7+
>b : Symbol(b, Decl(a.ts, 0, 8))
8+
9+
export { default as a } from "./b";
10+
>a : Symbol(a, Decl(a.ts, 1, 8))
11+
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
=== tests/cases/compiler/b.ts ===
2+
export const b = null;
3+
>b : any
4+
>null : null
5+
6+
=== tests/cases/compiler/a.ts ===
7+
export { b } from "./b";
8+
>b : any
9+
10+
export { default as a } from "./b";
11+
>default : any
12+
>a : any
13+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
tests/cases/compiler/a.ts(2,10): error TS2305: Module '"./b"' has no exported member 'default'.
2+
3+
4+
==== tests/cases/compiler/b.d.ts (0 errors) ====
5+
declare var b: number;
6+
export { b };
7+
8+
==== tests/cases/compiler/a.ts (1 errors) ====
9+
export { b } from "./b";
10+
export { default } from "./b";
11+
~~~~~~~
12+
!!! error TS2305: Module '"./b"' has no exported member 'default'.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//// [tests/cases/compiler/reexportMissingDefault4.ts] ////
2+
3+
//// [b.d.ts]
4+
declare var b: number;
5+
export { b };
6+
7+
//// [a.ts]
8+
export { b } from "./b";
9+
export { default } from "./b";
10+
11+
//// [a.js]
12+
"use strict";
13+
exports.__esModule = true;
14+
var b_1 = require("./b");
15+
exports.b = b_1.b;
16+
var b_2 = require("./b");
17+
exports["default"] = b_2["default"];
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
=== tests/cases/compiler/b.d.ts ===
2+
declare var b: number;
3+
>b : Symbol(b, Decl(b.d.ts, 0, 11))
4+
5+
export { b };
6+
>b : Symbol(b, Decl(b.d.ts, 1, 8))
7+
8+
=== tests/cases/compiler/a.ts ===
9+
export { b } from "./b";
10+
>b : Symbol(b, Decl(a.ts, 0, 8))
11+
12+
export { default } from "./b";
13+
>default : Symbol(default, Decl(a.ts, 1, 8))
14+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
=== tests/cases/compiler/b.d.ts ===
2+
declare var b: number;
3+
>b : number
4+
5+
export { b };
6+
>b : number
7+
8+
=== tests/cases/compiler/a.ts ===
9+
export { b } from "./b";
10+
>b : number
11+
12+
export { default } from "./b";
13+
>default : any
14+
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
//// [tests/cases/compiler/reexportMissingDefault5.ts] ////
2+
3+
//// [b.d.ts]
4+
declare var b: number;
5+
export { b };
6+
7+
//// [a.ts]
8+
export { b } from "./b";
9+
export { default as Foo } from "./b";
10+
11+
//// [a.js]
12+
System.register(["./b"], function (exports_1, context_1) {
13+
"use strict";
14+
var __moduleName = context_1 && context_1.id;
15+
return {
16+
setters: [
17+
function (b_1_1) {
18+
exports_1({
19+
"b": b_1_1["b"]
20+
});
21+
exports_1({
22+
"Foo": b_1_1["default"]
23+
});
24+
}
25+
],
26+
execute: function () {
27+
}
28+
};
29+
});
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
=== tests/cases/compiler/b.d.ts ===
2+
declare var b: number;
3+
>b : Symbol(b, Decl(b.d.ts, 0, 11))
4+
5+
export { b };
6+
>b : Symbol(b, Decl(b.d.ts, 1, 8))
7+
8+
=== tests/cases/compiler/a.ts ===
9+
export { b } from "./b";
10+
>b : Symbol(b, Decl(a.ts, 0, 8))
11+
12+
export { default as Foo } from "./b";
13+
>default : Symbol("tests/cases/compiler/b", Decl(b.d.ts, 0, 0))
14+
>Foo : Symbol(Foo, Decl(a.ts, 1, 8))
15+
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
=== tests/cases/compiler/b.d.ts ===
2+
declare var b: number;
3+
>b : number
4+
5+
export { b };
6+
>b : number
7+
8+
=== tests/cases/compiler/a.ts ===
9+
export { b } from "./b";
10+
>b : number
11+
12+
export { default as Foo } from "./b";
13+
>default : typeof import("tests/cases/compiler/b")
14+
>Foo : typeof import("tests/cases/compiler/b")
15+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
tests/cases/compiler/a.ts(2,10): error TS2305: Module '"./b"' has no exported member 'default'.
2+
3+
4+
==== tests/cases/compiler/b.ts (0 errors) ====
5+
export const b = null;
6+
7+
==== tests/cases/compiler/a.ts (1 errors) ====
8+
export { b } from "./b";
9+
export { default } from "./b";
10+
~~~~~~~
11+
!!! error TS2305: Module '"./b"' has no exported member 'default'.

0 commit comments

Comments
 (0)