Skip to content

Commit e309554

Browse files
committed
Allow export default const enum, export default enum, export default declare class
1 parent 4d2aa9b commit e309554

17 files changed

+322
-0
lines changed

src/compiler/parser.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1310,7 +1310,11 @@ namespace ts {
13101310
nextToken();
13111311
return token() === SyntaxKind.ClassKeyword || token() === SyntaxKind.FunctionKeyword ||
13121312
token() === SyntaxKind.InterfaceKeyword ||
1313+
token() === SyntaxKind.EnumKeyword ||
1314+
token() === SyntaxKind.NamespaceKeyword ||
1315+
(token() === SyntaxKind.ConstKeyword && lookAhead(() => nextToken() === SyntaxKind.EnumKeyword)) ||
13131316
(token() === SyntaxKind.AbstractKeyword && lookAhead(nextTokenIsClassKeywordOnSameLine)) ||
1317+
(token() === SyntaxKind.DeclareKeyword && lookAhead(nextTokenIsClassKeywordOnSameLine)) ||
13141318
(token() === SyntaxKind.AsyncKeyword && lookAhead(nextTokenIsFunctionKeywordOnSameLine));
13151319
}
13161320

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//// [tests/cases/compiler/exportDefaultConstEnum.ts] ////
2+
3+
//// [a.ts]
4+
// https://github.com/Microsoft/TypeScript/issues/3792
5+
export
6+
default
7+
const
8+
enum
9+
A
10+
{ FOO }
11+
12+
//// [b.ts]
13+
import A from './a';
14+
15+
const x = A.FOO;
16+
17+
//// [a.js]
18+
"use strict";
19+
exports.__esModule = true;
20+
//// [b.js]
21+
"use strict";
22+
exports.__esModule = true;
23+
var x = 0 /* FOO */;
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
=== tests/cases/compiler/a.ts ===
2+
// https://github.com/Microsoft/TypeScript/issues/3792
3+
export
4+
default
5+
const
6+
enum
7+
A
8+
>A : Symbol(A, Decl(a.ts, 0, 0))
9+
10+
{ FOO }
11+
>FOO : Symbol(A.FOO, Decl(a.ts, 6, 1))
12+
13+
=== tests/cases/compiler/b.ts ===
14+
import A from './a';
15+
>A : Symbol(A, Decl(b.ts, 0, 6))
16+
17+
const x = A.FOO;
18+
>x : Symbol(x, Decl(b.ts, 2, 5))
19+
>A.FOO : Symbol(A.FOO, Decl(a.ts, 6, 1))
20+
>A : Symbol(A, Decl(b.ts, 0, 6))
21+
>FOO : Symbol(A.FOO, Decl(a.ts, 6, 1))
22+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
=== tests/cases/compiler/a.ts ===
2+
// https://github.com/Microsoft/TypeScript/issues/3792
3+
export
4+
default
5+
const
6+
enum
7+
A
8+
>A : A
9+
10+
{ FOO }
11+
>FOO : A
12+
13+
=== tests/cases/compiler/b.ts ===
14+
import A from './a';
15+
>A : typeof A
16+
17+
const x = A.FOO;
18+
>x : A
19+
>A.FOO : A
20+
>A : typeof A
21+
>FOO : A
22+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//// [tests/cases/compiler/exportDefaultDeclareClass.ts] ////
2+
3+
//// [a.ts]
4+
// https://github.com/Microsoft/TypeScript/issues/3792
5+
export default declare class A {
6+
foo(): number
7+
}
8+
9+
//// [b.ts]
10+
import A from './a';
11+
12+
const x = new A().foo();
13+
14+
//// [a.js]
15+
"use strict";
16+
exports.__esModule = true;
17+
//// [b.js]
18+
"use strict";
19+
exports.__esModule = true;
20+
var a_1 = require("./a");
21+
var x = new a_1["default"]().foo();
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
=== tests/cases/compiler/a.ts ===
2+
// https://github.com/Microsoft/TypeScript/issues/3792
3+
export default declare class A {
4+
>A : Symbol(A, Decl(a.ts, 0, 0))
5+
6+
foo(): number
7+
>foo : Symbol(A.foo, Decl(a.ts, 1, 32))
8+
}
9+
10+
=== tests/cases/compiler/b.ts ===
11+
import A from './a';
12+
>A : Symbol(A, Decl(b.ts, 0, 6))
13+
14+
const x = new A().foo();
15+
>x : Symbol(x, Decl(b.ts, 2, 5))
16+
>new A().foo : Symbol(A.foo, Decl(a.ts, 1, 32))
17+
>A : Symbol(A, Decl(b.ts, 0, 6))
18+
>foo : Symbol(A.foo, Decl(a.ts, 1, 32))
19+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
=== tests/cases/compiler/a.ts ===
2+
// https://github.com/Microsoft/TypeScript/issues/3792
3+
export default declare class A {
4+
>A : A
5+
6+
foo(): number
7+
>foo : () => number
8+
}
9+
10+
=== tests/cases/compiler/b.ts ===
11+
import A from './a';
12+
>A : typeof A
13+
14+
const x = new A().foo();
15+
>x : number
16+
>new A().foo() : number
17+
>new A().foo : () => number
18+
>new A() : A
19+
>A : typeof A
20+
>foo : () => number
21+
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//// [tests/cases/compiler/exportDefaultEnum.ts] ////
2+
3+
//// [a.ts]
4+
// https://github.com/Microsoft/TypeScript/issues/3792
5+
export default enum A { FOO }
6+
7+
//// [b.ts]
8+
import A from './a';
9+
10+
const x = A.FOO;
11+
const y = A[x];
12+
13+
//// [a.js]
14+
"use strict";
15+
exports.__esModule = true;
16+
// https://github.com/Microsoft/TypeScript/issues/3792
17+
var A;
18+
(function (A) {
19+
A[A["FOO"] = 0] = "FOO";
20+
})(A = exports.A || (exports.A = {}));
21+
//// [b.js]
22+
"use strict";
23+
exports.__esModule = true;
24+
var a_1 = require("./a");
25+
var x = a_1["default"].FOO;
26+
var y = a_1["default"][x];
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
=== tests/cases/compiler/a.ts ===
2+
// https://github.com/Microsoft/TypeScript/issues/3792
3+
export default enum A { FOO }
4+
>A : Symbol(A, Decl(a.ts, 0, 0))
5+
>FOO : Symbol(A.FOO, Decl(a.ts, 1, 23))
6+
7+
=== tests/cases/compiler/b.ts ===
8+
import A from './a';
9+
>A : Symbol(A, Decl(b.ts, 0, 6))
10+
11+
const x = A.FOO;
12+
>x : Symbol(x, Decl(b.ts, 2, 5))
13+
>A.FOO : Symbol(A.FOO, Decl(a.ts, 1, 23))
14+
>A : Symbol(A, Decl(b.ts, 0, 6))
15+
>FOO : Symbol(A.FOO, Decl(a.ts, 1, 23))
16+
17+
const y = A[x];
18+
>y : Symbol(y, Decl(b.ts, 3, 5))
19+
>A : Symbol(A, Decl(b.ts, 0, 6))
20+
>x : Symbol(x, Decl(b.ts, 2, 5))
21+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
=== tests/cases/compiler/a.ts ===
2+
// https://github.com/Microsoft/TypeScript/issues/3792
3+
export default enum A { FOO }
4+
>A : A
5+
>FOO : A
6+
7+
=== tests/cases/compiler/b.ts ===
8+
import A from './a';
9+
>A : typeof A
10+
11+
const x = A.FOO;
12+
>x : A
13+
>A.FOO : A
14+
>A : typeof A
15+
>FOO : A
16+
17+
const y = A[x];
18+
>y : string
19+
>A[x] : string
20+
>A : typeof A
21+
>x : A
22+

0 commit comments

Comments
 (0)