Skip to content

Commit 4577959

Browse files
committed
Merge pull request #2557 from Microsoft/exportEqualsDtsFix
Ensure export= is emitted correctelly in declaration files
2 parents e34848d + 757257b commit 4577959

11 files changed

+113
-28
lines changed

src/compiler/checker.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -1109,7 +1109,7 @@ module ts {
11091109

11101110
// Check if symbol is any of the alias
11111111
return forEachValue(symbols, symbolFromSymbolTable => {
1112-
if (symbolFromSymbolTable.flags & SymbolFlags.Alias) {
1112+
if (symbolFromSymbolTable.flags & SymbolFlags.Alias && symbolFromSymbolTable.name !== "export=") {
11131113
if (!useOnlyExternalAliasing || // We can use any type of alias to get the name
11141114
// Is this external alias, then use it to name
11151115
ts.forEach(symbolFromSymbolTable.declarations, isExternalModuleImportEqualsDeclaration)) {
@@ -1950,6 +1950,10 @@ module ts {
19501950
case SyntaxKind.SourceFile:
19511951
return true;
19521952

1953+
// Export assignements do not create name bindings outside the module
1954+
case SyntaxKind.ExportAssignment:
1955+
return false;
1956+
19531957
default:
19541958
Debug.fail("isDeclarationVisible unknown: SyntaxKind: " + node.kind);
19551959
}

tests/baselines/reference/declFileImportModuleWithExportAssignment.types

+7-7
Original file line numberDiff line numberDiff line change
@@ -42,23 +42,23 @@ module m2 {
4242

4343
}
4444
var m2: {
45-
>m2 : { (): export=.connectExport; test1: export=.connectModule; test2(): export=.connectModule; }
45+
>m2 : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; }
4646

4747
(): m2.connectExport;
4848
>m2 : unknown
49-
>connectExport : export=.connectExport
49+
>connectExport : m2.connectExport
5050

5151
test1: m2.connectModule;
52-
>test1 : export=.connectModule
52+
>test1 : m2.connectModule
5353
>m2 : unknown
54-
>connectModule : export=.connectModule
54+
>connectModule : m2.connectModule
5555

5656
test2(): m2.connectModule;
57-
>test2 : () => export=.connectModule
57+
>test2 : () => m2.connectModule
5858
>m2 : unknown
59-
>connectModule : export=.connectModule
59+
>connectModule : m2.connectModule
6060

6161
};
6262
export = m2;
63-
>m2 : { (): export=.connectExport; test1: export=.connectModule; test2(): export=.connectModule; }
63+
>m2 : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; }
6464

tests/baselines/reference/declareExternalModuleWithExportAssignedFundule.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ declare module "express" {
77
function express(): express.ExpressServer;
88
>express : typeof express
99
>express : unknown
10-
>ExpressServer : export=.ExpressServer
10+
>ExpressServer : express.ExpressServer
1111

1212
module express {
1313
>express : typeof express

tests/baselines/reference/declareFileExportAssignment.types

+7-7
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,24 @@ module m2 {
2727
}
2828

2929
var m2: {
30-
>m2 : { (): export=.connectExport; test1: export=.connectModule; test2(): export=.connectModule; }
30+
>m2 : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; }
3131

3232
(): m2.connectExport;
3333
>m2 : unknown
34-
>connectExport : export=.connectExport
34+
>connectExport : m2.connectExport
3535

3636
test1: m2.connectModule;
37-
>test1 : export=.connectModule
37+
>test1 : m2.connectModule
3838
>m2 : unknown
39-
>connectModule : export=.connectModule
39+
>connectModule : m2.connectModule
4040

4141
test2(): m2.connectModule;
42-
>test2 : () => export=.connectModule
42+
>test2 : () => m2.connectModule
4343
>m2 : unknown
44-
>connectModule : export=.connectModule
44+
>connectModule : m2.connectModule
4545

4646
};
4747

4848
export = m2;
49-
>m2 : { (): export=.connectExport; test1: export=.connectModule; test2(): export=.connectModule; }
49+
>m2 : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; }
5050

tests/baselines/reference/declareFileExportAssignmentWithVarFromVariableStatement.types

+7-7
Original file line numberDiff line numberDiff line change
@@ -28,24 +28,24 @@ module m2 {
2828

2929
var x = 10, m2: {
3030
>x : number
31-
>m2 : { (): export=.connectExport; test1: export=.connectModule; test2(): export=.connectModule; }
31+
>m2 : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; }
3232

3333
(): m2.connectExport;
3434
>m2 : unknown
35-
>connectExport : export=.connectExport
35+
>connectExport : m2.connectExport
3636

3737
test1: m2.connectModule;
38-
>test1 : export=.connectModule
38+
>test1 : m2.connectModule
3939
>m2 : unknown
40-
>connectModule : export=.connectModule
40+
>connectModule : m2.connectModule
4141

4242
test2(): m2.connectModule;
43-
>test2 : () => export=.connectModule
43+
>test2 : () => m2.connectModule
4444
>m2 : unknown
45-
>connectModule : export=.connectModule
45+
>connectModule : m2.connectModule
4646

4747
};
4848

4949
export = m2;
50-
>m2 : { (): export=.connectExport; test1: export=.connectModule; test2(): export=.connectModule; }
50+
>m2 : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; }
5151

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
//// [es5ExportEqualsDts.ts]
2+
3+
class A {
4+
foo() {
5+
var aVal: A.B;
6+
return aVal;
7+
}
8+
}
9+
10+
module A {
11+
export interface B { }
12+
}
13+
14+
export = A
15+
16+
//// [es5ExportEqualsDts.js]
17+
var A = (function () {
18+
function A() {
19+
}
20+
A.prototype.foo = function () {
21+
var aVal;
22+
return aVal;
23+
};
24+
return A;
25+
})();
26+
module.exports = A;
27+
28+
29+
//// [es5ExportEqualsDts.d.ts]
30+
declare class A {
31+
foo(): A.B;
32+
}
33+
declare module A {
34+
interface B {
35+
}
36+
}
37+
export = A;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
=== tests/cases/compiler/es5ExportEqualsDts.ts ===
2+
3+
class A {
4+
>A : A
5+
6+
foo() {
7+
>foo : () => A.B
8+
9+
var aVal: A.B;
10+
>aVal : A.B
11+
>A : unknown
12+
>B : A.B
13+
14+
return aVal;
15+
>aVal : A.B
16+
}
17+
}
18+
19+
module A {
20+
>A : typeof A
21+
22+
export interface B { }
23+
>B : B
24+
}
25+
26+
export = A
27+
>A : A
28+

tests/baselines/reference/exportAssignClassAndModule.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ class Foo {
2222
>Foo : Foo
2323

2424
x: Foo.Bar;
25-
>x : export=.Bar
25+
>x : Foo.Bar
2626
>Foo : unknown
27-
>Bar : export=.Bar
27+
>Bar : Foo.Bar
2828
}
2929
module Foo {
3030
>Foo : typeof Foo

tests/baselines/reference/exportEqualNamespaces.types

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ interface server {
1212

1313
(): server.Server;
1414
>server : unknown
15-
>Server : export=.Server
15+
>Server : server.Server
1616

1717
startTime: Date;
1818
>startTime : Date

tests/baselines/reference/privacyCheckExportAssignmentOnExportedGenericInterface1.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ interface Foo<T> {
1212
>T : T
1313
}
1414
var Foo: new () => Foo.A<Foo<string>>;
15-
>Foo : new () => export=.A<Foo<string>>
15+
>Foo : new () => Foo.A<Foo<string>>
1616
>Foo : unknown
17-
>A : export=.A<T>
17+
>A : Foo.A<T>
1818
>Foo : Foo<T>
1919

2020
export = Foo;
+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// @target: es5
2+
// @module: commonjs
3+
// @declaration: true
4+
5+
class A {
6+
foo() {
7+
var aVal: A.B;
8+
return aVal;
9+
}
10+
}
11+
12+
module A {
13+
export interface B { }
14+
}
15+
16+
export = A

0 commit comments

Comments
 (0)