Skip to content

Commit a320e1b

Browse files
committed
Make getLocalSymbolForExportDefault look harder for an export
Look for a symbol that has a `.localSymbol` property instead of blindly using the first one. Fixes microsoft#37829.
1 parent b601487 commit a320e1b

File tree

5 files changed

+39
-1
lines changed

5 files changed

+39
-1
lines changed

src/compiler/utilities.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4769,7 +4769,11 @@ namespace ts {
47694769
}
47704770

47714771
export function getLocalSymbolForExportDefault(symbol: Symbol) {
4772-
return isExportDefaultSymbol(symbol) ? symbol.declarations[0].localSymbol : undefined;
4772+
if (!isExportDefaultSymbol(symbol)) return undefined;
4773+
for (const decl of symbol.declarations) {
4774+
if (decl.localSymbol) return decl.localSymbol;
4775+
}
4776+
return undefined;
47734777
}
47744778

47754779
function isExportDefaultSymbol(symbol: Symbol): boolean {
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//// [exportDefaultInterfaceAndValue.ts]
2+
export default interface A { a: string; }
3+
export default function() { return 1; }
4+
declare var x: A;
5+
6+
7+
//// [exportDefaultInterfaceAndValue.js]
8+
"use strict";
9+
exports.__esModule = true;
10+
function default_1() { return 1; }
11+
exports["default"] = default_1;
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
=== tests/cases/compiler/exportDefaultInterfaceAndValue.ts ===
2+
export default interface A { a: string; }
3+
>A : Symbol(A, Decl(exportDefaultInterfaceAndValue.ts, 0, 41), Decl(exportDefaultInterfaceAndValue.ts, 0, 0))
4+
>a : Symbol(A.a, Decl(exportDefaultInterfaceAndValue.ts, 0, 28))
5+
6+
export default function() { return 1; }
7+
declare var x: A;
8+
>x : Symbol(x, Decl(exportDefaultInterfaceAndValue.ts, 2, 11))
9+
>A : Symbol(A, Decl(exportDefaultInterfaceAndValue.ts, 0, 41), Decl(exportDefaultInterfaceAndValue.ts, 0, 0))
10+
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
=== tests/cases/compiler/exportDefaultInterfaceAndValue.ts ===
2+
export default interface A { a: string; }
3+
>a : string
4+
5+
export default function() { return 1; }
6+
>1 : 1
7+
8+
declare var x: A;
9+
>x : A
10+
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export default interface A { a: string; }
2+
export default function() { return 1; }
3+
declare var x: A;

0 commit comments

Comments
 (0)