Skip to content

Commit 1316987

Browse files
authored
fix(54152): Cannot use const enum to define an interface key in isolatedModules mode (#54165)
1 parent 4c82d91 commit 1316987

File tree

5 files changed

+133
-1
lines changed

5 files changed

+133
-1
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37825,7 +37825,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
3782537825
if (getIsolatedModules(compilerOptions)) {
3782637826
Debug.assert(!!(type.symbol.flags & SymbolFlags.ConstEnum));
3782737827
const constEnumDeclaration = type.symbol.valueDeclaration as EnumDeclaration;
37828-
if (constEnumDeclaration.flags & NodeFlags.Ambient) {
37828+
if (constEnumDeclaration.flags & NodeFlags.Ambient && !isValidTypeOnlyAliasUseSite(node)) {
3782937829
error(node, Diagnostics.Cannot_access_ambient_const_enums_when_0_is_enabled, isolatedModulesLikeFlagName);
3783037830
}
3783137831
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//// [tests/cases/compiler/isolatedModulesConstEnum.ts] ////
2+
3+
//// [foo.d.ts]
4+
declare const enum EventName {
5+
FOO = 1,
6+
BAR = 2
7+
}
8+
9+
type E1 = {
10+
[EventName.FOO]: number;
11+
[EventName.BAR]: string;
12+
};
13+
14+
//// [bar.ts]
15+
type E2 = {
16+
[EventName.FOO]: number;
17+
[EventName.BAR]: string;
18+
};
19+
20+
21+
//// [bar.js]
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
=== /foo.d.ts ===
2+
declare const enum EventName {
3+
>EventName : Symbol(EventName, Decl(foo.d.ts, 0, 0))
4+
5+
FOO = 1,
6+
>FOO : Symbol(EventName.FOO, Decl(foo.d.ts, 0, 30))
7+
8+
BAR = 2
9+
>BAR : Symbol(EventName.BAR, Decl(foo.d.ts, 1, 12))
10+
}
11+
12+
type E1 = {
13+
>E1 : Symbol(E1, Decl(foo.d.ts, 3, 1))
14+
15+
[EventName.FOO]: number;
16+
>[EventName.FOO] : Symbol([EventName.FOO], Decl(foo.d.ts, 5, 11))
17+
>EventName.FOO : Symbol(EventName.FOO, Decl(foo.d.ts, 0, 30))
18+
>EventName : Symbol(EventName, Decl(foo.d.ts, 0, 0))
19+
>FOO : Symbol(EventName.FOO, Decl(foo.d.ts, 0, 30))
20+
21+
[EventName.BAR]: string;
22+
>[EventName.BAR] : Symbol([EventName.BAR], Decl(foo.d.ts, 6, 28))
23+
>EventName.BAR : Symbol(EventName.BAR, Decl(foo.d.ts, 1, 12))
24+
>EventName : Symbol(EventName, Decl(foo.d.ts, 0, 0))
25+
>BAR : Symbol(EventName.BAR, Decl(foo.d.ts, 1, 12))
26+
27+
};
28+
29+
=== /bar.ts ===
30+
type E2 = {
31+
>E2 : Symbol(E2, Decl(bar.ts, 0, 0))
32+
33+
[EventName.FOO]: number;
34+
>[EventName.FOO] : Symbol([EventName.FOO], Decl(bar.ts, 0, 11))
35+
>EventName.FOO : Symbol(EventName.FOO, Decl(foo.d.ts, 0, 30))
36+
>EventName : Symbol(EventName, Decl(foo.d.ts, 0, 0))
37+
>FOO : Symbol(EventName.FOO, Decl(foo.d.ts, 0, 30))
38+
39+
[EventName.BAR]: string;
40+
>[EventName.BAR] : Symbol([EventName.BAR], Decl(bar.ts, 1, 28))
41+
>EventName.BAR : Symbol(EventName.BAR, Decl(foo.d.ts, 1, 12))
42+
>EventName : Symbol(EventName, Decl(foo.d.ts, 0, 0))
43+
>BAR : Symbol(EventName.BAR, Decl(foo.d.ts, 1, 12))
44+
45+
};
46+
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
=== /foo.d.ts ===
2+
declare const enum EventName {
3+
>EventName : EventName
4+
5+
FOO = 1,
6+
>FOO : EventName.FOO
7+
>1 : 1
8+
9+
BAR = 2
10+
>BAR : EventName.BAR
11+
>2 : 2
12+
}
13+
14+
type E1 = {
15+
>E1 : { 1: number; 2: string; }
16+
17+
[EventName.FOO]: number;
18+
>[EventName.FOO] : number
19+
>EventName.FOO : EventName.FOO
20+
>EventName : typeof EventName
21+
>FOO : EventName.FOO
22+
23+
[EventName.BAR]: string;
24+
>[EventName.BAR] : string
25+
>EventName.BAR : EventName.BAR
26+
>EventName : typeof EventName
27+
>BAR : EventName.BAR
28+
29+
};
30+
31+
=== /bar.ts ===
32+
type E2 = {
33+
>E2 : { 1: number; 2: string; }
34+
35+
[EventName.FOO]: number;
36+
>[EventName.FOO] : number
37+
>EventName.FOO : EventName.FOO
38+
>EventName : typeof EventName
39+
>FOO : EventName.FOO
40+
41+
[EventName.BAR]: string;
42+
>[EventName.BAR] : string
43+
>EventName.BAR : EventName.BAR
44+
>EventName : typeof EventName
45+
>BAR : EventName.BAR
46+
47+
};
48+
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// @isolatedModules: true
2+
// @filename: /foo.d.ts
3+
declare const enum EventName {
4+
FOO = 1,
5+
BAR = 2
6+
}
7+
8+
type E1 = {
9+
[EventName.FOO]: number;
10+
[EventName.BAR]: string;
11+
};
12+
13+
// @filename: /bar.ts
14+
type E2 = {
15+
[EventName.FOO]: number;
16+
[EventName.BAR]: string;
17+
};

0 commit comments

Comments
 (0)