mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-04-17 01:49:41 -05:00
fix(54152): Cannot use const enum to define an interface key in isolatedModules mode (#54165)
This commit is contained in:
@@ -37825,7 +37825,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
if (getIsolatedModules(compilerOptions)) {
|
||||
Debug.assert(!!(type.symbol.flags & SymbolFlags.ConstEnum));
|
||||
const constEnumDeclaration = type.symbol.valueDeclaration as EnumDeclaration;
|
||||
if (constEnumDeclaration.flags & NodeFlags.Ambient) {
|
||||
if (constEnumDeclaration.flags & NodeFlags.Ambient && !isValidTypeOnlyAliasUseSite(node)) {
|
||||
error(node, Diagnostics.Cannot_access_ambient_const_enums_when_0_is_enabled, isolatedModulesLikeFlagName);
|
||||
}
|
||||
}
|
||||
|
||||
21
tests/baselines/reference/isolatedModulesConstEnum.js
Normal file
21
tests/baselines/reference/isolatedModulesConstEnum.js
Normal file
@@ -0,0 +1,21 @@
|
||||
//// [tests/cases/compiler/isolatedModulesConstEnum.ts] ////
|
||||
|
||||
//// [foo.d.ts]
|
||||
declare const enum EventName {
|
||||
FOO = 1,
|
||||
BAR = 2
|
||||
}
|
||||
|
||||
type E1 = {
|
||||
[EventName.FOO]: number;
|
||||
[EventName.BAR]: string;
|
||||
};
|
||||
|
||||
//// [bar.ts]
|
||||
type E2 = {
|
||||
[EventName.FOO]: number;
|
||||
[EventName.BAR]: string;
|
||||
};
|
||||
|
||||
|
||||
//// [bar.js]
|
||||
46
tests/baselines/reference/isolatedModulesConstEnum.symbols
Normal file
46
tests/baselines/reference/isolatedModulesConstEnum.symbols
Normal file
@@ -0,0 +1,46 @@
|
||||
=== /foo.d.ts ===
|
||||
declare const enum EventName {
|
||||
>EventName : Symbol(EventName, Decl(foo.d.ts, 0, 0))
|
||||
|
||||
FOO = 1,
|
||||
>FOO : Symbol(EventName.FOO, Decl(foo.d.ts, 0, 30))
|
||||
|
||||
BAR = 2
|
||||
>BAR : Symbol(EventName.BAR, Decl(foo.d.ts, 1, 12))
|
||||
}
|
||||
|
||||
type E1 = {
|
||||
>E1 : Symbol(E1, Decl(foo.d.ts, 3, 1))
|
||||
|
||||
[EventName.FOO]: number;
|
||||
>[EventName.FOO] : Symbol([EventName.FOO], Decl(foo.d.ts, 5, 11))
|
||||
>EventName.FOO : Symbol(EventName.FOO, Decl(foo.d.ts, 0, 30))
|
||||
>EventName : Symbol(EventName, Decl(foo.d.ts, 0, 0))
|
||||
>FOO : Symbol(EventName.FOO, Decl(foo.d.ts, 0, 30))
|
||||
|
||||
[EventName.BAR]: string;
|
||||
>[EventName.BAR] : Symbol([EventName.BAR], Decl(foo.d.ts, 6, 28))
|
||||
>EventName.BAR : Symbol(EventName.BAR, Decl(foo.d.ts, 1, 12))
|
||||
>EventName : Symbol(EventName, Decl(foo.d.ts, 0, 0))
|
||||
>BAR : Symbol(EventName.BAR, Decl(foo.d.ts, 1, 12))
|
||||
|
||||
};
|
||||
|
||||
=== /bar.ts ===
|
||||
type E2 = {
|
||||
>E2 : Symbol(E2, Decl(bar.ts, 0, 0))
|
||||
|
||||
[EventName.FOO]: number;
|
||||
>[EventName.FOO] : Symbol([EventName.FOO], Decl(bar.ts, 0, 11))
|
||||
>EventName.FOO : Symbol(EventName.FOO, Decl(foo.d.ts, 0, 30))
|
||||
>EventName : Symbol(EventName, Decl(foo.d.ts, 0, 0))
|
||||
>FOO : Symbol(EventName.FOO, Decl(foo.d.ts, 0, 30))
|
||||
|
||||
[EventName.BAR]: string;
|
||||
>[EventName.BAR] : Symbol([EventName.BAR], Decl(bar.ts, 1, 28))
|
||||
>EventName.BAR : Symbol(EventName.BAR, Decl(foo.d.ts, 1, 12))
|
||||
>EventName : Symbol(EventName, Decl(foo.d.ts, 0, 0))
|
||||
>BAR : Symbol(EventName.BAR, Decl(foo.d.ts, 1, 12))
|
||||
|
||||
};
|
||||
|
||||
48
tests/baselines/reference/isolatedModulesConstEnum.types
Normal file
48
tests/baselines/reference/isolatedModulesConstEnum.types
Normal file
@@ -0,0 +1,48 @@
|
||||
=== /foo.d.ts ===
|
||||
declare const enum EventName {
|
||||
>EventName : EventName
|
||||
|
||||
FOO = 1,
|
||||
>FOO : EventName.FOO
|
||||
>1 : 1
|
||||
|
||||
BAR = 2
|
||||
>BAR : EventName.BAR
|
||||
>2 : 2
|
||||
}
|
||||
|
||||
type E1 = {
|
||||
>E1 : { 1: number; 2: string; }
|
||||
|
||||
[EventName.FOO]: number;
|
||||
>[EventName.FOO] : number
|
||||
>EventName.FOO : EventName.FOO
|
||||
>EventName : typeof EventName
|
||||
>FOO : EventName.FOO
|
||||
|
||||
[EventName.BAR]: string;
|
||||
>[EventName.BAR] : string
|
||||
>EventName.BAR : EventName.BAR
|
||||
>EventName : typeof EventName
|
||||
>BAR : EventName.BAR
|
||||
|
||||
};
|
||||
|
||||
=== /bar.ts ===
|
||||
type E2 = {
|
||||
>E2 : { 1: number; 2: string; }
|
||||
|
||||
[EventName.FOO]: number;
|
||||
>[EventName.FOO] : number
|
||||
>EventName.FOO : EventName.FOO
|
||||
>EventName : typeof EventName
|
||||
>FOO : EventName.FOO
|
||||
|
||||
[EventName.BAR]: string;
|
||||
>[EventName.BAR] : string
|
||||
>EventName.BAR : EventName.BAR
|
||||
>EventName : typeof EventName
|
||||
>BAR : EventName.BAR
|
||||
|
||||
};
|
||||
|
||||
17
tests/cases/compiler/isolatedModulesConstEnum.ts
Normal file
17
tests/cases/compiler/isolatedModulesConstEnum.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
// @isolatedModules: true
|
||||
// @filename: /foo.d.ts
|
||||
declare const enum EventName {
|
||||
FOO = 1,
|
||||
BAR = 2
|
||||
}
|
||||
|
||||
type E1 = {
|
||||
[EventName.FOO]: number;
|
||||
[EventName.BAR]: string;
|
||||
};
|
||||
|
||||
// @filename: /bar.ts
|
||||
type E2 = {
|
||||
[EventName.FOO]: number;
|
||||
[EventName.BAR]: string;
|
||||
};
|
||||
Reference in New Issue
Block a user