Skip to content

Commit 3365272

Browse files
authored
Dont follow aliases when looking for default exported symbol (#22995)
1 parent 51d44b6 commit 3365272

File tree

5 files changed

+134
-2
lines changed

5 files changed

+134
-2
lines changed

src/compiler/checker.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1741,8 +1741,8 @@ namespace ts {
17411741
// Declaration files (and ambient modules)
17421742
if (!file || file.isDeclarationFile) {
17431743
// Definitely cannot have a synthetic default if they have a syntactic default member specified
1744-
const defaultExportSymbol = resolveExportByName(moduleSymbol, InternalSymbolName.Default, dontResolveAlias);
1745-
if (defaultExportSymbol && defaultExportSymbol.valueDeclaration && isSyntacticDefault(defaultExportSymbol.valueDeclaration)) {
1744+
const defaultExportSymbol = resolveExportByName(moduleSymbol, InternalSymbolName.Default, /*dontResolveAlias*/ true); // Dont resolve alias because we want the immediately exported symbol's declaration
1745+
if (defaultExportSymbol && some(defaultExportSymbol.declarations, isSyntacticDefault)) {
17461746
return false;
17471747
}
17481748
// It _might_ still be incorrect to assume there is no __esModule marker on the import at runtime, even if there is no `default` member
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//// [tests/cases/compiler/systemDefaultImportCallable.ts] ////
2+
3+
//// [core-js.d.ts]
4+
declare module core {
5+
var String: {
6+
repeat(text: string, count: number): string;
7+
};
8+
}
9+
declare module "core-js/fn/string/repeat" {
10+
var repeat: typeof core.String.repeat;
11+
export default repeat;
12+
}
13+
//// [greeter.ts]
14+
import repeat from "core-js/fn/string/repeat";
15+
16+
const _: string = repeat(new Date().toUTCString() + " ", 2);
17+
18+
//// [greeter.js]
19+
System.register(["core-js/fn/string/repeat"], function (exports_1, context_1) {
20+
"use strict";
21+
var __moduleName = context_1 && context_1.id;
22+
var repeat_1, _;
23+
return {
24+
setters: [
25+
function (repeat_1_1) {
26+
repeat_1 = repeat_1_1;
27+
}
28+
],
29+
execute: function () {
30+
_ = repeat_1["default"](new Date().toUTCString() + " ", 2);
31+
}
32+
};
33+
});
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
=== tests/cases/compiler/core-js.d.ts ===
2+
declare module core {
3+
>core : Symbol(core, Decl(core-js.d.ts, 0, 0))
4+
5+
var String: {
6+
>String : Symbol(String, Decl(core-js.d.ts, 1, 7))
7+
8+
repeat(text: string, count: number): string;
9+
>repeat : Symbol(repeat, Decl(core-js.d.ts, 1, 17))
10+
>text : Symbol(text, Decl(core-js.d.ts, 2, 15))
11+
>count : Symbol(count, Decl(core-js.d.ts, 2, 28))
12+
13+
};
14+
}
15+
declare module "core-js/fn/string/repeat" {
16+
>"core-js/fn/string/repeat" : Symbol("core-js/fn/string/repeat", Decl(core-js.d.ts, 4, 1))
17+
18+
var repeat: typeof core.String.repeat;
19+
>repeat : Symbol(repeat, Decl(core-js.d.ts, 6, 7))
20+
>core.String.repeat : Symbol(repeat, Decl(core-js.d.ts, 1, 17))
21+
>core.String : Symbol(core.String, Decl(core-js.d.ts, 1, 7))
22+
>core : Symbol(core, Decl(core-js.d.ts, 0, 0))
23+
>String : Symbol(core.String, Decl(core-js.d.ts, 1, 7))
24+
>repeat : Symbol(repeat, Decl(core-js.d.ts, 1, 17))
25+
26+
export default repeat;
27+
>repeat : Symbol(repeat, Decl(core-js.d.ts, 6, 7))
28+
}
29+
=== tests/cases/compiler/greeter.ts ===
30+
import repeat from "core-js/fn/string/repeat";
31+
>repeat : Symbol(repeat, Decl(greeter.ts, 0, 6))
32+
33+
const _: string = repeat(new Date().toUTCString() + " ", 2);
34+
>_ : Symbol(_, Decl(greeter.ts, 2, 5))
35+
>repeat : Symbol(repeat, Decl(greeter.ts, 0, 6))
36+
>new Date().toUTCString : Symbol(Date.toUTCString, Decl(lib.d.ts, --, --))
37+
>Date : Symbol(Date, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
38+
>toUTCString : Symbol(Date.toUTCString, Decl(lib.d.ts, --, --))
39+
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
=== tests/cases/compiler/core-js.d.ts ===
2+
declare module core {
3+
>core : typeof core
4+
5+
var String: {
6+
>String : { repeat(text: string, count: number): string; }
7+
8+
repeat(text: string, count: number): string;
9+
>repeat : (text: string, count: number) => string
10+
>text : string
11+
>count : number
12+
13+
};
14+
}
15+
declare module "core-js/fn/string/repeat" {
16+
>"core-js/fn/string/repeat" : typeof "core-js/fn/string/repeat"
17+
18+
var repeat: typeof core.String.repeat;
19+
>repeat : (text: string, count: number) => string
20+
>core.String.repeat : (text: string, count: number) => string
21+
>core.String : { repeat(text: string, count: number): string; }
22+
>core : typeof core
23+
>String : { repeat(text: string, count: number): string; }
24+
>repeat : (text: string, count: number) => string
25+
26+
export default repeat;
27+
>repeat : (text: string, count: number) => string
28+
}
29+
=== tests/cases/compiler/greeter.ts ===
30+
import repeat from "core-js/fn/string/repeat";
31+
>repeat : (text: string, count: number) => string
32+
33+
const _: string = repeat(new Date().toUTCString() + " ", 2);
34+
>_ : string
35+
>repeat(new Date().toUTCString() + " ", 2) : string
36+
>repeat : (text: string, count: number) => string
37+
>new Date().toUTCString() + " " : string
38+
>new Date().toUTCString() : string
39+
>new Date().toUTCString : () => string
40+
>new Date() : Date
41+
>Date : DateConstructor
42+
>toUTCString : () => string
43+
>" " : " "
44+
>2 : 2
45+
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// @module: system
2+
// @filename: core-js.d.ts
3+
declare module core {
4+
var String: {
5+
repeat(text: string, count: number): string;
6+
};
7+
}
8+
declare module "core-js/fn/string/repeat" {
9+
var repeat: typeof core.String.repeat;
10+
export default repeat;
11+
}
12+
// @filename: greeter.ts
13+
import repeat from "core-js/fn/string/repeat";
14+
15+
const _: string = repeat(new Date().toUTCString() + " ", 2);

0 commit comments

Comments
 (0)