diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index db040abdd52f8..f9f1389a2ce68 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5886,9 +5886,9 @@ namespace ts { for (const declaration of symbol.declarations) { if (declaration.kind === SyntaxKind.EnumDeclaration) { for (const member of (declaration).members) { - const memberType = getLiteralType(getEnumMemberValue(member)!, enumCount, getSymbolOfNode(member)); // TODO: GH#18217 + const memberType = getFreshTypeOfLiteralType(getLiteralType(getEnumMemberValue(member)!, enumCount, getSymbolOfNode(member))); // TODO: GH#18217 getSymbolLinks(getSymbolOfNode(member)).declaredType = memberType; - memberTypeList.push(memberType); + memberTypeList.push(getRegularTypeOfLiteralType(memberType)); } } } @@ -8221,7 +8221,7 @@ namespace ts { const res = tryGetDeclaredTypeOfSymbol(symbol); if (res) { return checkNoTypeArguments(node, symbol) ? - res.flags & TypeFlags.TypeParameter ? getConstrainedTypeVariable(res, node) : res : + res.flags & TypeFlags.TypeParameter ? getConstrainedTypeVariable(res, node) : getRegularTypeOfLiteralType(res) : errorType; } @@ -12705,7 +12705,7 @@ namespace ts { } function getWidenedLiteralType(type: Type): Type { - return type.flags & TypeFlags.EnumLiteral ? getBaseTypeOfEnumLiteralType(type) : + return type.flags & TypeFlags.EnumLiteral && type.flags & TypeFlags.FreshLiteral ? getBaseTypeOfEnumLiteralType(type) : type.flags & TypeFlags.StringLiteral && type.flags & TypeFlags.FreshLiteral ? stringType : type.flags & TypeFlags.NumberLiteral && type.flags & TypeFlags.FreshLiteral ? numberType : type.flags & TypeFlags.BooleanLiteral ? booleanType : @@ -28090,13 +28090,14 @@ namespace ts { return false; } - function literalTypeToNode(type: LiteralType): Expression { - return createLiteral(type.value); + function literalTypeToNode(type: LiteralType, enclosing: Node): Expression { + const enumResult = type.flags & TypeFlags.EnumLiteral && nodeBuilder.symbolToExpression(type.symbol, SymbolFlags.Value, enclosing); + return enumResult || createLiteral(type.value); } function createLiteralConstValue(node: VariableDeclaration | PropertyDeclaration | PropertySignature | ParameterDeclaration) { const type = getTypeOfSymbol(getSymbolOfNode(node)); - return literalTypeToNode(type); + return literalTypeToNode(type, node); } function createResolver(): EmitResolver { @@ -29430,13 +29431,20 @@ namespace ts { (expr).operand.kind === SyntaxKind.NumericLiteral; } + function isSimpleLiteralEnumReference(expr: Expression) { + if ( + (isPropertyAccessExpression(expr) || (isElementAccessExpression(expr) && isStringOrNumberLiteralExpression(expr.argumentExpression))) && + isEntityNameExpression(expr.expression) + ) return !!(checkExpressionCached(expr).flags & TypeFlags.EnumLiteral); + } + function checkAmbientInitializer(node: VariableDeclaration | PropertyDeclaration | PropertySignature) { if (node.initializer) { - const isInvalidInitializer = !isStringOrNumberLiteralExpression(node.initializer); + const isInvalidInitializer = !(isStringOrNumberLiteralExpression(node.initializer) || isSimpleLiteralEnumReference(node.initializer)); const isConstOrReadonly = isDeclarationReadonly(node) || isVariableDeclaration(node) && isVarConst(node); if (isConstOrReadonly && !node.type) { if (isInvalidInitializer) { - return grammarErrorOnNode(node.initializer!, Diagnostics.A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal); + return grammarErrorOnNode(node.initializer!, Diagnostics.A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_reference); } } else { diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index dc489b9295dad..a9ae5dac3c6a6 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -835,7 +835,7 @@ "category": "Error", "code": 1253 }, - "A 'const' initializer in an ambient context must be a string or numeric literal.": { + "A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.": { "category": "Error", "code": 1254 }, diff --git a/tests/baselines/reference/ambientConstLiterals.js b/tests/baselines/reference/ambientConstLiterals.js index 7c7da7321c312..b0b222128ace0 100644 --- a/tests/baselines/reference/ambientConstLiterals.js +++ b/tests/baselines/reference/ambientConstLiterals.js @@ -3,7 +3,7 @@ function f(x: T): T { return x; } -enum E { A, B, C } +enum E { A, B, C, "non identifier" } const c1 = "abc"; const c2 = 123; @@ -13,6 +13,7 @@ const c5 = f(123); const c6 = f(-123); const c7 = true; const c8 = E.A; +const c8b = E["non identifier"]; const c9 = { x: "abc" }; const c10 = [123]; const c11 = "abc" + "def"; @@ -29,6 +30,7 @@ var E; E[E["A"] = 0] = "A"; E[E["B"] = 1] = "B"; E[E["C"] = 2] = "C"; + E[E["non identifier"] = 3] = "non identifier"; })(E || (E = {})); var c1 = "abc"; var c2 = 123; @@ -38,6 +40,7 @@ var c5 = f(123); var c6 = f(-123); var c7 = true; var c8 = E.A; +var c8b = E["non identifier"]; var c9 = { x: "abc" }; var c10 = [123]; var c11 = "abc" + "def"; @@ -51,7 +54,8 @@ declare function f(x: T): T; declare enum E { A = 0, B = 1, - C = 2 + C = 2, + "non identifier" = 3 } declare const c1 = "abc"; declare const c2 = 123; @@ -60,7 +64,8 @@ declare const c4 = 123; declare const c5 = 123; declare const c6 = -123; declare const c7: boolean; -declare const c8: E; +declare const c8 = E.A; +declare const c8b = E["non identifier"]; declare const c9: { x: string; }; diff --git a/tests/baselines/reference/ambientConstLiterals.symbols b/tests/baselines/reference/ambientConstLiterals.symbols index 905ec3fd4fd4d..482300a321863 100644 --- a/tests/baselines/reference/ambientConstLiterals.symbols +++ b/tests/baselines/reference/ambientConstLiterals.symbols @@ -10,11 +10,12 @@ function f(x: T): T { >x : Symbol(x, Decl(ambientConstLiterals.ts, 0, 14)) } -enum E { A, B, C } +enum E { A, B, C, "non identifier" } >E : Symbol(E, Decl(ambientConstLiterals.ts, 2, 1)) >A : Symbol(E.A, Decl(ambientConstLiterals.ts, 4, 8)) >B : Symbol(E.B, Decl(ambientConstLiterals.ts, 4, 11)) >C : Symbol(E.C, Decl(ambientConstLiterals.ts, 4, 14)) +>"non identifier" : Symbol(E["non identifier"], Decl(ambientConstLiterals.ts, 4, 17)) const c1 = "abc"; >c1 : Symbol(c1, Decl(ambientConstLiterals.ts, 6, 5)) @@ -47,27 +48,32 @@ const c8 = E.A; >E : Symbol(E, Decl(ambientConstLiterals.ts, 2, 1)) >A : Symbol(E.A, Decl(ambientConstLiterals.ts, 4, 8)) +const c8b = E["non identifier"]; +>c8b : Symbol(c8b, Decl(ambientConstLiterals.ts, 14, 5)) +>E : Symbol(E, Decl(ambientConstLiterals.ts, 2, 1)) +>"non identifier" : Symbol(E["non identifier"], Decl(ambientConstLiterals.ts, 4, 17)) + const c9 = { x: "abc" }; ->c9 : Symbol(c9, Decl(ambientConstLiterals.ts, 14, 5)) ->x : Symbol(x, Decl(ambientConstLiterals.ts, 14, 12)) +>c9 : Symbol(c9, Decl(ambientConstLiterals.ts, 15, 5)) +>x : Symbol(x, Decl(ambientConstLiterals.ts, 15, 12)) const c10 = [123]; ->c10 : Symbol(c10, Decl(ambientConstLiterals.ts, 15, 5)) +>c10 : Symbol(c10, Decl(ambientConstLiterals.ts, 16, 5)) const c11 = "abc" + "def"; ->c11 : Symbol(c11, Decl(ambientConstLiterals.ts, 16, 5)) +>c11 : Symbol(c11, Decl(ambientConstLiterals.ts, 17, 5)) const c12 = 123 + 456; ->c12 : Symbol(c12, Decl(ambientConstLiterals.ts, 17, 5)) +>c12 : Symbol(c12, Decl(ambientConstLiterals.ts, 18, 5)) const c13 = Math.random() > 0.5 ? "abc" : "def"; ->c13 : Symbol(c13, Decl(ambientConstLiterals.ts, 18, 5)) +>c13 : Symbol(c13, Decl(ambientConstLiterals.ts, 19, 5)) >Math.random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --)) >Math : Symbol(Math, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --)) const c14 = Math.random() > 0.5 ? 123 : 456; ->c14 : Symbol(c14, Decl(ambientConstLiterals.ts, 19, 5)) +>c14 : Symbol(c14, Decl(ambientConstLiterals.ts, 20, 5)) >Math.random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --)) >Math : Symbol(Math, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --)) diff --git a/tests/baselines/reference/ambientConstLiterals.types b/tests/baselines/reference/ambientConstLiterals.types index e27776e18476d..a40532f801709 100644 --- a/tests/baselines/reference/ambientConstLiterals.types +++ b/tests/baselines/reference/ambientConstLiterals.types @@ -7,11 +7,12 @@ function f(x: T): T { >x : T } -enum E { A, B, C } +enum E { A, B, C, "non identifier" } >E : E >A : E.A >B : E.B >C : E.C +>"non identifier" : E.non identifier const c1 = "abc"; >c1 : "abc" @@ -52,6 +53,12 @@ const c8 = E.A; >E : typeof E >A : E.A +const c8b = E["non identifier"]; +>c8b : E.non identifier +>E["non identifier"] : E.non identifier +>E : typeof E +>"non identifier" : "non identifier" + const c9 = { x: "abc" }; >c9 : { x: string; } >{ x: "abc" } : { x: string; } diff --git a/tests/baselines/reference/ambientEnum1.types b/tests/baselines/reference/ambientEnum1.types index 968299f4d0ae5..29573226568b8 100644 --- a/tests/baselines/reference/ambientEnum1.types +++ b/tests/baselines/reference/ambientEnum1.types @@ -3,7 +3,7 @@ >E1 : E1 y = 4.23 ->y : E1 +>y : E1.y >4.23 : 4.23 } diff --git a/tests/baselines/reference/ambientEnumElementInitializer1.types b/tests/baselines/reference/ambientEnumElementInitializer1.types index 11ef744950499..4fa9d5efdf76b 100644 --- a/tests/baselines/reference/ambientEnumElementInitializer1.types +++ b/tests/baselines/reference/ambientEnumElementInitializer1.types @@ -3,6 +3,6 @@ declare enum E { >E : E e = 3 ->e : E +>e : E.e >3 : 3 } diff --git a/tests/baselines/reference/ambientEnumElementInitializer2.types b/tests/baselines/reference/ambientEnumElementInitializer2.types index 47d85bf3c8473..218863379d798 100644 --- a/tests/baselines/reference/ambientEnumElementInitializer2.types +++ b/tests/baselines/reference/ambientEnumElementInitializer2.types @@ -3,7 +3,7 @@ declare enum E { >E : E e = -3 // Negative ->e : E +>e : E.e >-3 : -3 >3 : 3 } diff --git a/tests/baselines/reference/ambientEnumElementInitializer3.types b/tests/baselines/reference/ambientEnumElementInitializer3.types index 3c099d00ede58..e4cf5678d7bb9 100644 --- a/tests/baselines/reference/ambientEnumElementInitializer3.types +++ b/tests/baselines/reference/ambientEnumElementInitializer3.types @@ -3,6 +3,6 @@ declare enum E { >E : E e = 3.3 // Decimal ->e : E +>e : E.e >3.3 : 3.3 } diff --git a/tests/baselines/reference/ambientEnumElementInitializer4.types b/tests/baselines/reference/ambientEnumElementInitializer4.types index 3bef657f5bbc8..2cd8c75600de6 100644 --- a/tests/baselines/reference/ambientEnumElementInitializer4.types +++ b/tests/baselines/reference/ambientEnumElementInitializer4.types @@ -3,6 +3,6 @@ declare enum E { >E : E e = 0xA ->e : E +>e : E.e >0xA : 10 } diff --git a/tests/baselines/reference/ambientEnumElementInitializer5.types b/tests/baselines/reference/ambientEnumElementInitializer5.types index b3020a6d777ca..71919718a6e16 100644 --- a/tests/baselines/reference/ambientEnumElementInitializer5.types +++ b/tests/baselines/reference/ambientEnumElementInitializer5.types @@ -3,7 +3,7 @@ declare enum E { >E : E e = -0xA ->e : E +>e : E.e >-0xA : -10 >0xA : 10 } diff --git a/tests/baselines/reference/ambientEnumElementInitializer6.types b/tests/baselines/reference/ambientEnumElementInitializer6.types index f093d0e2dfef5..9caad2dde7aee 100644 --- a/tests/baselines/reference/ambientEnumElementInitializer6.types +++ b/tests/baselines/reference/ambientEnumElementInitializer6.types @@ -6,7 +6,7 @@ declare module M { >E : E e = 3 ->e : E +>e : E.e >3 : 3 } } diff --git a/tests/baselines/reference/ambientErrors.types b/tests/baselines/reference/ambientErrors.types index 6286d4320adb6..a1d33d29eeb7f 100644 --- a/tests/baselines/reference/ambientErrors.types +++ b/tests/baselines/reference/ambientErrors.types @@ -46,7 +46,7 @@ declare enum E1 { >E1 : E1 y = 4.23 ->y : E1 +>y : E1.y >4.23 : 4.23 } diff --git a/tests/baselines/reference/anyAssignabilityInInheritance.types b/tests/baselines/reference/anyAssignabilityInInheritance.types index f0c1684d63cc8..7afcf99fb2c03 100644 --- a/tests/baselines/reference/anyAssignabilityInInheritance.types +++ b/tests/baselines/reference/anyAssignabilityInInheritance.types @@ -199,7 +199,7 @@ var r3 = foo3(a); // any enum E { A } >E : E ->A : E +>A : E.A declare function foo14(x: E): E; >foo14 : { (x: E): E; (x: any): any; } diff --git a/tests/baselines/reference/anyAssignableToEveryType.types b/tests/baselines/reference/anyAssignableToEveryType.types index c4ac27e5b67a9..17d8ddea49728 100644 --- a/tests/baselines/reference/anyAssignableToEveryType.types +++ b/tests/baselines/reference/anyAssignableToEveryType.types @@ -20,7 +20,7 @@ var ai: I; enum E { A } >E : E ->A : E +>A : E.A var ae: E; >ae : E diff --git a/tests/baselines/reference/anyAssignableToEveryType2.types b/tests/baselines/reference/anyAssignableToEveryType2.types index c4c21f503b601..146251c4a7a84 100644 --- a/tests/baselines/reference/anyAssignableToEveryType2.types +++ b/tests/baselines/reference/anyAssignableToEveryType2.types @@ -129,7 +129,7 @@ interface I13 { enum E { A } >E : E ->A : E +>A : E.A interface I14 { [x: string]: E; diff --git a/tests/baselines/reference/assignAnyToEveryType.types b/tests/baselines/reference/assignAnyToEveryType.types index bddd4fcb45c08..11aa0e48a77cb 100644 --- a/tests/baselines/reference/assignAnyToEveryType.types +++ b/tests/baselines/reference/assignAnyToEveryType.types @@ -42,7 +42,7 @@ enum E { >E : E A ->A : E +>A : E.A } var g: E = x; diff --git a/tests/baselines/reference/assignEveryTypeToAny.types b/tests/baselines/reference/assignEveryTypeToAny.types index a0b397a003b68..8cec100b8be5d 100644 --- a/tests/baselines/reference/assignEveryTypeToAny.types +++ b/tests/baselines/reference/assignEveryTypeToAny.types @@ -76,7 +76,7 @@ enum E { >E : E A ->A : E +>A : E.A } x = E.A; diff --git a/tests/baselines/reference/assignmentToParenthesizedIdentifiers.types b/tests/baselines/reference/assignmentToParenthesizedIdentifiers.types index ab95fb8cb2f21..9808365514435 100644 --- a/tests/baselines/reference/assignmentToParenthesizedIdentifiers.types +++ b/tests/baselines/reference/assignmentToParenthesizedIdentifiers.types @@ -294,7 +294,7 @@ enum E { >E : E A ->A : E +>A : E.A } E = undefined; // Error >E = undefined : undefined diff --git a/tests/baselines/reference/assignments.types b/tests/baselines/reference/assignments.types index f83b6eadbe00c..03d53e22825ef 100644 --- a/tests/baselines/reference/assignments.types +++ b/tests/baselines/reference/assignments.types @@ -24,7 +24,7 @@ C = null; // Error enum E { A } >E : E ->A : E +>A : E.A E = null; // Error >E = null : null diff --git a/tests/baselines/reference/asyncEnum_es5.types b/tests/baselines/reference/asyncEnum_es5.types index 2f94fd33152a7..97d27a1a09397 100644 --- a/tests/baselines/reference/asyncEnum_es5.types +++ b/tests/baselines/reference/asyncEnum_es5.types @@ -3,5 +3,5 @@ async enum E { >E : E Value ->Value : E +>Value : E.Value } diff --git a/tests/baselines/reference/asyncEnum_es6.types b/tests/baselines/reference/asyncEnum_es6.types index c28b646edf942..22a560c2ca1cf 100644 --- a/tests/baselines/reference/asyncEnum_es6.types +++ b/tests/baselines/reference/asyncEnum_es6.types @@ -3,5 +3,5 @@ async enum E { >E : E Value ->Value : E +>Value : E.Value } diff --git a/tests/baselines/reference/augmentedTypesClass.types b/tests/baselines/reference/augmentedTypesClass.types index 6bee329d24ee4..91bffcf0d2ac8 100644 --- a/tests/baselines/reference/augmentedTypesClass.types +++ b/tests/baselines/reference/augmentedTypesClass.types @@ -15,5 +15,5 @@ class c4 { public foo() { } } enum c4 { One } // error >c4 : c4 ->One : c4 +>One : c4.One diff --git a/tests/baselines/reference/augmentedTypesClass2.types b/tests/baselines/reference/augmentedTypesClass2.types index df4379508b83f..4f80fe6d16ac2 100644 --- a/tests/baselines/reference/augmentedTypesClass2.types +++ b/tests/baselines/reference/augmentedTypesClass2.types @@ -32,7 +32,7 @@ class c33 { } enum c33 { One }; >c33 : c33 ->One : c33 +>One : c33.One // class then import class c44 { diff --git a/tests/baselines/reference/augmentedTypesEnum.types b/tests/baselines/reference/augmentedTypesEnum.types index d6fcf87f1388f..27ce4f7c400ba 100644 --- a/tests/baselines/reference/augmentedTypesEnum.types +++ b/tests/baselines/reference/augmentedTypesEnum.types @@ -2,7 +2,7 @@ // enum then var enum e1111 { One } // error >e1111 : e1111 ->One : e1111 +>One : e1111.One var e1111 = 1; // error >e1111 : number @@ -11,14 +11,14 @@ var e1111 = 1; // error // enum then function enum e2 { One } // error >e2 : e2 ->One : e2 +>One : e2.One function e2() { } // error >e2 : () => void enum e3 { One } // error >e3 : e3 ->One : e3 +>One : e3.One var e3 = () => { } // error >e3 : () => void @@ -27,7 +27,7 @@ var e3 = () => { } // error // enum then class enum e4 { One } // error >e4 : e4 ->One : e4 +>One : e4.One class e4 { public foo() { } } // error >e4 : e4 @@ -36,30 +36,30 @@ class e4 { public foo() { } } // error // enum then enum enum e5 { One } >e5 : e5 ->One : e5 +>One : e5.One enum e5 { Two } // error >e5 : e5 ->Two : e5 +>Two : e5.One enum e5a { One } // error >e5a : e5a ->One : e5a +>One : e5a.One enum e5a { One } // error >e5a : e5a ->One : e5a +>One : e5a.One // enum then internal module enum e6 { One } >e6 : e6 ->One : e6 +>One : e6.One module e6 { } // ok enum e6a { One } >e6a : e6a ->One : e6a +>One : e6a.One module e6a { var y = 2; } // should be error >e6a : typeof e6a @@ -68,7 +68,7 @@ module e6a { var y = 2; } // should be error enum e6b { One } >e6b : e6b ->One : e6b +>One : e6b.One module e6b { export var y = 2; } // should be error >e6b : typeof e6b diff --git a/tests/baselines/reference/augmentedTypesEnum2.types b/tests/baselines/reference/augmentedTypesEnum2.types index 4b77d0eb90b14..16232e0f3ffb7 100644 --- a/tests/baselines/reference/augmentedTypesEnum2.types +++ b/tests/baselines/reference/augmentedTypesEnum2.types @@ -2,7 +2,7 @@ // enum then interface enum e1 { One } // error >e1 : e1 ->One : e1 +>One : e1.One interface e1 { // error foo(): void; @@ -14,7 +14,7 @@ interface e1 { // error // enum then class enum e2 { One }; // error >e2 : e2 ->One : e2 +>One : e2.One class e2 { // error >e2 : e2 diff --git a/tests/baselines/reference/augmentedTypesEnum3.types b/tests/baselines/reference/augmentedTypesEnum3.types index d3c2e9335066f..10e17c56d9804 100644 --- a/tests/baselines/reference/augmentedTypesEnum3.types +++ b/tests/baselines/reference/augmentedTypesEnum3.types @@ -25,13 +25,13 @@ enum A { >A : A b ->b : A +>b : A.b } enum A { >A : A c ->c : A +>c : A.b } module A { >A : typeof A diff --git a/tests/baselines/reference/augmentedTypesFunction.types b/tests/baselines/reference/augmentedTypesFunction.types index b019c02d90cd9..e30d38179c623 100644 --- a/tests/baselines/reference/augmentedTypesFunction.types +++ b/tests/baselines/reference/augmentedTypesFunction.types @@ -41,7 +41,7 @@ function y4() { } // error enum y4 { One } // error >y4 : y4 ->One : y4 +>One : y4.One // function then internal module function y5() { } diff --git a/tests/baselines/reference/augmentedTypesInterface.types b/tests/baselines/reference/augmentedTypesInterface.types index 6b6ef88015fb4..1ee66d267c73b 100644 --- a/tests/baselines/reference/augmentedTypesInterface.types +++ b/tests/baselines/reference/augmentedTypesInterface.types @@ -35,7 +35,7 @@ interface i3 { // error } enum i3 { One }; // error >i3 : i3 ->One : i3 +>One : i3.One // interface then import interface i4 { diff --git a/tests/baselines/reference/augmentedTypesModules.types b/tests/baselines/reference/augmentedTypesModules.types index 1a03b9991eda2..c377381f7695c 100644 --- a/tests/baselines/reference/augmentedTypesModules.types +++ b/tests/baselines/reference/augmentedTypesModules.types @@ -174,7 +174,7 @@ module m4a { var y = 2; } enum m4a { One } >m4a : m4a ->One : m4a +>One : m4a.One module m4b { export var y = 2; } >m4b : typeof m4b @@ -183,14 +183,14 @@ module m4b { export var y = 2; } enum m4b { One } >m4b : m4b ->One : m4b +>One : m4b.One module m4c { interface I { foo(): void } } >foo : () => void enum m4c { One } >m4c : m4c ->One : m4c +>One : m4c.One module m4d { class C { foo() { } } } >m4d : typeof m4d @@ -199,7 +199,7 @@ module m4d { class C { foo() { } } } enum m4d { One } >m4d : m4d ->One : m4d +>One : m4d.One //// module then module diff --git a/tests/baselines/reference/augmentedTypesModules4.types b/tests/baselines/reference/augmentedTypesModules4.types index d1dd8fe19ec71..61083db259112 100644 --- a/tests/baselines/reference/augmentedTypesModules4.types +++ b/tests/baselines/reference/augmentedTypesModules4.types @@ -12,7 +12,7 @@ module m4a { var y = 2; } enum m4a { One } >m4a : m4a ->One : m4a +>One : m4a.One module m4b { export var y = 2; } >m4b : typeof m4b @@ -21,14 +21,14 @@ module m4b { export var y = 2; } enum m4b { One } >m4b : m4b ->One : m4b +>One : m4b.One module m4c { interface I { foo(): void } } >foo : () => void enum m4c { One } >m4c : m4c ->One : m4c +>One : m4c.One module m4d { class C { foo() { } } } >m4d : typeof m4d @@ -37,7 +37,7 @@ module m4d { class C { foo() { } } } enum m4d { One } >m4d : m4d ->One : m4d +>One : m4d.One //// module then module diff --git a/tests/baselines/reference/augmentedTypesVar.types b/tests/baselines/reference/augmentedTypesVar.types index f2ced2b542679..13a9db43c0866 100644 --- a/tests/baselines/reference/augmentedTypesVar.types +++ b/tests/baselines/reference/augmentedTypesVar.types @@ -47,7 +47,7 @@ var x5 = 1; enum x5 { One } // error >x5 : x5 ->One : x5 +>One : x5.One // var then module var x6 = 1; diff --git a/tests/baselines/reference/bestCommonTypeOfTuple.types b/tests/baselines/reference/bestCommonTypeOfTuple.types index 67c6c08654b5a..612403084a574 100644 --- a/tests/baselines/reference/bestCommonTypeOfTuple.types +++ b/tests/baselines/reference/bestCommonTypeOfTuple.types @@ -16,11 +16,11 @@ function f3(x: number): boolean { return true; } enum E1 { one } >E1 : E1 ->one : E1 +>one : E1.one enum E2 { two } >E2 : E2 ->two : E2 +>two : E2.two var t1: [(x: number) => string, (x: number) => number]; @@ -46,9 +46,9 @@ t1 = [f1, f2]; >f2 : (x: number) => number t2 = [E1.one, E2.two]; ->t2 = [E1.one, E2.two] : [E1, E2] +>t2 = [E1.one, E2.two] : [E1.one, E2.two] >t2 : [E1, E2] ->[E1.one, E2.two] : [E1, E2] +>[E1.one, E2.two] : [E1.one, E2.two] >E1.one : E1 >E1 : typeof E1 >one : E1 @@ -64,9 +64,9 @@ t3 = [5, undefined]; >undefined : undefined t4 = [E1.one, E2.two, 20]; ->t4 = [E1.one, E2.two, 20] : [E1, E2, number] +>t4 = [E1.one, E2.two, 20] : [E1.one, E2.two, number] >t4 : [E1, E2, number] ->[E1.one, E2.two, 20] : [E1, E2, number] +>[E1.one, E2.two, 20] : [E1.one, E2.two, number] >E1.one : E1 >E1 : typeof E1 >one : E1 diff --git a/tests/baselines/reference/blockScopedEnumVariablesUseBeforeDef.types b/tests/baselines/reference/blockScopedEnumVariablesUseBeforeDef.types index 5c4dc43f7748a..8b8aef0f91185 100644 --- a/tests/baselines/reference/blockScopedEnumVariablesUseBeforeDef.types +++ b/tests/baselines/reference/blockScopedEnumVariablesUseBeforeDef.types @@ -9,7 +9,7 @@ function foo1() { enum E { A } >E : E ->A : E +>A : E.A } function foo2() { @@ -22,5 +22,5 @@ function foo2() { const enum E { A } >E : E ->A : E +>A : E.A } diff --git a/tests/baselines/reference/blockScopedEnumVariablesUseBeforeDef_preserve.types b/tests/baselines/reference/blockScopedEnumVariablesUseBeforeDef_preserve.types index 5194114112e46..29ca892b1d745 100644 --- a/tests/baselines/reference/blockScopedEnumVariablesUseBeforeDef_preserve.types +++ b/tests/baselines/reference/blockScopedEnumVariablesUseBeforeDef_preserve.types @@ -9,7 +9,7 @@ function foo1() { enum E { A } >E : E ->A : E +>A : E.A } function foo2() { @@ -22,5 +22,5 @@ function foo2() { const enum E { A } >E : E ->A : E +>A : E.A } diff --git a/tests/baselines/reference/callSignatureWithoutReturnTypeAnnotationInference.types b/tests/baselines/reference/callSignatureWithoutReturnTypeAnnotationInference.types index 67b20f4bcbe38..a7ccc2cd4e0cb 100644 --- a/tests/baselines/reference/callSignatureWithoutReturnTypeAnnotationInference.types +++ b/tests/baselines/reference/callSignatureWithoutReturnTypeAnnotationInference.types @@ -265,7 +265,7 @@ var r14 = foo14(); enum e1 { A } >e1 : e1 ->A : e1 +>A : e1.A module e1 { export var y = 1; } >e1 : typeof e1 diff --git a/tests/baselines/reference/castingTuple.types b/tests/baselines/reference/castingTuple.types index 5280ca4962b68..729c090e1ca82 100644 --- a/tests/baselines/reference/castingTuple.types +++ b/tests/baselines/reference/castingTuple.types @@ -25,11 +25,11 @@ class F extends A { f }; enum E1 { one } >E1 : E1 ->one : E1 +>one : E1.one enum E2 { one } >E2 : E2 ->one : E2 +>one : E2.one // no error var numStrTuple: [number, string] = [5, "foo"]; @@ -90,7 +90,7 @@ var eleFromCDA2 = classCDATuple[5]; // C | D | A var t10: [E1, E2] = [E1.one, E2.one]; >t10 : [E1, E2] ->[E1.one, E2.one] : [E1, E2] +>[E1.one, E2.one] : [E1.one, E2.one] >E1.one : E1 >E1 : typeof E1 >one : E1 diff --git a/tests/baselines/reference/classExtendingPrimitive.types b/tests/baselines/reference/classExtendingPrimitive.types index 99dec6c462b6c..7c118c092bc85 100644 --- a/tests/baselines/reference/classExtendingPrimitive.types +++ b/tests/baselines/reference/classExtendingPrimitive.types @@ -40,7 +40,7 @@ class C7 extends Undefined { } enum E { A } >E : E ->A : E +>A : E.A class C8 extends E { } >C8 : C8 diff --git a/tests/baselines/reference/classStaticInitializersUsePropertiesBeforeDeclaration.types b/tests/baselines/reference/classStaticInitializersUsePropertiesBeforeDeclaration.types index 72149f11a5c5c..2e11087f36897 100644 --- a/tests/baselines/reference/classStaticInitializersUsePropertiesBeforeDeclaration.types +++ b/tests/baselines/reference/classStaticInitializersUsePropertiesBeforeDeclaration.types @@ -25,7 +25,7 @@ enum Enum { >Enum : Enum A ->A : Enum +>A : Enum.A } const ObjLiteral = { diff --git a/tests/baselines/reference/collisionCodeGenEnumWithEnumMemberConflict.types b/tests/baselines/reference/collisionCodeGenEnumWithEnumMemberConflict.types index 398179b5cdcf2..b9366a0cd848a 100644 --- a/tests/baselines/reference/collisionCodeGenEnumWithEnumMemberConflict.types +++ b/tests/baselines/reference/collisionCodeGenEnumWithEnumMemberConflict.types @@ -3,9 +3,9 @@ enum Color { >Color : Color Color, ->Color : Color +>Color : Color.Color Thing = Color ->Thing : Color +>Thing : Color.Color >Color : Color } diff --git a/tests/baselines/reference/collisionCodeGenModuleWithEnumMemberConflict.types b/tests/baselines/reference/collisionCodeGenModuleWithEnumMemberConflict.types index 527c8930fcb64..b629abc18dd1b 100644 --- a/tests/baselines/reference/collisionCodeGenModuleWithEnumMemberConflict.types +++ b/tests/baselines/reference/collisionCodeGenModuleWithEnumMemberConflict.types @@ -6,10 +6,10 @@ module m1 { >e : e m1, ->m1 : e +>m1 : e.m1 m2 = m1 ->m2 : e +>m2 : e.m1 >m1 : e } } diff --git a/tests/baselines/reference/computedPropertyNames47_ES5.types b/tests/baselines/reference/computedPropertyNames47_ES5.types index 7307210cfbedd..ab8ab053f6a44 100644 --- a/tests/baselines/reference/computedPropertyNames47_ES5.types +++ b/tests/baselines/reference/computedPropertyNames47_ES5.types @@ -1,11 +1,11 @@ === tests/cases/conformance/es6/computedProperties/computedPropertyNames47_ES5.ts === enum E1 { x } >E1 : E1 ->x : E1 +>x : E1.x enum E2 { x } >E2 : E2 ->x : E2 +>x : E2.x var o = { >o : { [E1.x || E2.x]: number; } diff --git a/tests/baselines/reference/computedPropertyNames47_ES6.types b/tests/baselines/reference/computedPropertyNames47_ES6.types index d630d5bba93ce..a11d09dd12108 100644 --- a/tests/baselines/reference/computedPropertyNames47_ES6.types +++ b/tests/baselines/reference/computedPropertyNames47_ES6.types @@ -1,11 +1,11 @@ === tests/cases/conformance/es6/computedProperties/computedPropertyNames47_ES6.ts === enum E1 { x } >E1 : E1 ->x : E1 +>x : E1.x enum E2 { x } >E2 : E2 ->x : E2 +>x : E2.x var o = { >o : { [E1.x || E2.x]: number; } diff --git a/tests/baselines/reference/computedPropertyNames48_ES5.types b/tests/baselines/reference/computedPropertyNames48_ES5.types index d3e2cbd6538b3..c036eabf3d7d3 100644 --- a/tests/baselines/reference/computedPropertyNames48_ES5.types +++ b/tests/baselines/reference/computedPropertyNames48_ES5.types @@ -6,7 +6,7 @@ declare function extractIndexer(p: { [n: number]: T }): T; enum E { x } >E : E ->x : E +>x : E.x var a: any; >a : any diff --git a/tests/baselines/reference/computedPropertyNames48_ES6.types b/tests/baselines/reference/computedPropertyNames48_ES6.types index 9a1f43f3b7dd4..7775f6c8c7be1 100644 --- a/tests/baselines/reference/computedPropertyNames48_ES6.types +++ b/tests/baselines/reference/computedPropertyNames48_ES6.types @@ -6,7 +6,7 @@ declare function extractIndexer(p: { [n: number]: T }): T; enum E { x } >E : E ->x : E +>x : E.x var a: any; >a : any diff --git a/tests/baselines/reference/computedPropertyNames7_ES5.types b/tests/baselines/reference/computedPropertyNames7_ES5.types index 55f6448127b21..08d75af1cd392 100644 --- a/tests/baselines/reference/computedPropertyNames7_ES5.types +++ b/tests/baselines/reference/computedPropertyNames7_ES5.types @@ -3,7 +3,7 @@ enum E { >E : E member ->member : E +>member : E.member } var v = { >v : { [E.member]: number; } diff --git a/tests/baselines/reference/computedPropertyNames7_ES6.types b/tests/baselines/reference/computedPropertyNames7_ES6.types index 0ae55d7c1bb5c..6e4c85ef6f73b 100644 --- a/tests/baselines/reference/computedPropertyNames7_ES6.types +++ b/tests/baselines/reference/computedPropertyNames7_ES6.types @@ -3,7 +3,7 @@ enum E { >E : E member ->member : E +>member : E.member } var v = { >v : { [E.member]: number; } diff --git a/tests/baselines/reference/constDeclarations-ambient-errors.errors.txt b/tests/baselines/reference/constDeclarations-ambient-errors.errors.txt index 8d2b9d67ed8ae..2eb6e22cd752f 100644 --- a/tests/baselines/reference/constDeclarations-ambient-errors.errors.txt +++ b/tests/baselines/reference/constDeclarations-ambient-errors.errors.txt @@ -1,6 +1,6 @@ tests/cases/compiler/constDeclarations-ambient-errors.ts(2,29): error TS1039: Initializers are not allowed in ambient contexts. tests/cases/compiler/constDeclarations-ambient-errors.ts(3,28): error TS1039: Initializers are not allowed in ambient contexts. -tests/cases/compiler/constDeclarations-ambient-errors.ts(4,20): error TS1254: A 'const' initializer in an ambient context must be a string or numeric literal. +tests/cases/compiler/constDeclarations-ambient-errors.ts(4,20): error TS1254: A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference. tests/cases/compiler/constDeclarations-ambient-errors.ts(4,39): error TS1039: Initializers are not allowed in ambient contexts. tests/cases/compiler/constDeclarations-ambient-errors.ts(4,53): error TS1039: Initializers are not allowed in ambient contexts. tests/cases/compiler/constDeclarations-ambient-errors.ts(8,24): error TS1039: Initializers are not allowed in ambient contexts. @@ -16,7 +16,7 @@ tests/cases/compiler/constDeclarations-ambient-errors.ts(8,24): error TS1039: In !!! error TS1039: Initializers are not allowed in ambient contexts. declare const c3 = null, c4 :string = "", c5: any = 0; ~~~~ -!!! error TS1254: A 'const' initializer in an ambient context must be a string or numeric literal. +!!! error TS1254: A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference. ~~ !!! error TS1039: Initializers are not allowed in ambient contexts. ~ diff --git a/tests/baselines/reference/constEnumBadPropertyNames.types b/tests/baselines/reference/constEnumBadPropertyNames.types index 05c45ba588ed3..2a640ed146271 100644 --- a/tests/baselines/reference/constEnumBadPropertyNames.types +++ b/tests/baselines/reference/constEnumBadPropertyNames.types @@ -1,7 +1,7 @@ === tests/cases/compiler/constEnumBadPropertyNames.ts === const enum E { A } >E : E ->A : E +>A : E.A var x = E["B"] >x : any diff --git a/tests/baselines/reference/constEnumErrors.types b/tests/baselines/reference/constEnumErrors.types index 187cc1dfde9f7..f0ebb60815c32 100644 --- a/tests/baselines/reference/constEnumErrors.types +++ b/tests/baselines/reference/constEnumErrors.types @@ -3,7 +3,7 @@ const enum E { >E : E A ->A : E +>A : E.A } module E { @@ -41,7 +41,7 @@ const enum E2 { >E2 : E2 A ->A : E2 +>A : E2.A } var y0 = E2[1] diff --git a/tests/baselines/reference/constEnumExternalModule.types b/tests/baselines/reference/constEnumExternalModule.types index 2bd978a2caf72..1076328445eb2 100644 --- a/tests/baselines/reference/constEnumExternalModule.types +++ b/tests/baselines/reference/constEnumExternalModule.types @@ -13,7 +13,7 @@ const enum E { >E : E V = 100 ->V : E +>V : E.V >100 : 100 } diff --git a/tests/baselines/reference/constEnumMergingWithValues1.types b/tests/baselines/reference/constEnumMergingWithValues1.types index 6a3777b625415..ccbf484c251cc 100644 --- a/tests/baselines/reference/constEnumMergingWithValues1.types +++ b/tests/baselines/reference/constEnumMergingWithValues1.types @@ -5,7 +5,7 @@ function foo() {} module foo { const enum E { X } >E : E ->X : E +>X : E.X } export = foo diff --git a/tests/baselines/reference/constEnumMergingWithValues2.types b/tests/baselines/reference/constEnumMergingWithValues2.types index aad5bb4cbc4cf..fa9932acc324c 100644 --- a/tests/baselines/reference/constEnumMergingWithValues2.types +++ b/tests/baselines/reference/constEnumMergingWithValues2.types @@ -5,7 +5,7 @@ class foo {} module foo { const enum E { X } >E : E ->X : E +>X : E.X } export = foo diff --git a/tests/baselines/reference/constEnumMergingWithValues3.types b/tests/baselines/reference/constEnumMergingWithValues3.types index 3bb578396d4ae..5d9b3c16e556a 100644 --- a/tests/baselines/reference/constEnumMergingWithValues3.types +++ b/tests/baselines/reference/constEnumMergingWithValues3.types @@ -1,12 +1,12 @@ === tests/cases/compiler/m1.ts === enum foo { A } >foo : foo ->A : foo +>A : foo.A module foo { const enum E { X } >E : E ->X : E +>X : E.X } export = foo diff --git a/tests/baselines/reference/constEnumMergingWithValues4.types b/tests/baselines/reference/constEnumMergingWithValues4.types index 88fa405f85d0a..3b0a085c70b9b 100644 --- a/tests/baselines/reference/constEnumMergingWithValues4.types +++ b/tests/baselines/reference/constEnumMergingWithValues4.types @@ -2,7 +2,7 @@ module foo { const enum E { X } >E : E ->X : E +>X : E.X } module foo { diff --git a/tests/baselines/reference/constEnumMergingWithValues5.types b/tests/baselines/reference/constEnumMergingWithValues5.types index efd3304ec9f64..e75179d4cde6e 100644 --- a/tests/baselines/reference/constEnumMergingWithValues5.types +++ b/tests/baselines/reference/constEnumMergingWithValues5.types @@ -2,7 +2,7 @@ module foo { const enum E { X } >E : E ->X : E +>X : E.X } export = foo diff --git a/tests/baselines/reference/constEnumOnlyModuleMerging.types b/tests/baselines/reference/constEnumOnlyModuleMerging.types index 9c75910ece36e..8e63afcaa8011 100644 --- a/tests/baselines/reference/constEnumOnlyModuleMerging.types +++ b/tests/baselines/reference/constEnumOnlyModuleMerging.types @@ -10,7 +10,7 @@ module Outer { module Outer { export const enum A { X } >A : A ->X : A +>X : A.X } module B { diff --git a/tests/baselines/reference/declarationEmitClassMemberNameConflict2.types b/tests/baselines/reference/declarationEmitClassMemberNameConflict2.types index ede64818ff513..fb107e7709376 100644 --- a/tests/baselines/reference/declarationEmitClassMemberNameConflict2.types +++ b/tests/baselines/reference/declarationEmitClassMemberNameConflict2.types @@ -7,14 +7,14 @@ enum Hello { >Hello : Hello World ->World : Hello +>World : Hello.World } enum Hello1 { >Hello1 : Hello1 World1 ->World1 : Hello1 +>World1 : Hello1.World1 } class Foo { diff --git a/tests/baselines/reference/declarationEmitEnumReadonlyProperty.js b/tests/baselines/reference/declarationEmitEnumReadonlyProperty.js new file mode 100644 index 0000000000000..75c4ce5139d43 --- /dev/null +++ b/tests/baselines/reference/declarationEmitEnumReadonlyProperty.js @@ -0,0 +1,36 @@ +//// [declarationEmitEnumReadonlyProperty.ts] +enum E { + A = 'a', + B = 'b' +} + +class C { + readonly type = E.A; +} + +let x: E.A = new C().type; + +//// [declarationEmitEnumReadonlyProperty.js] +var E; +(function (E) { + E["A"] = "a"; + E["B"] = "b"; +})(E || (E = {})); +var C = /** @class */ (function () { + function C() { + this.type = E.A; + } + return C; +}()); +var x = new C().type; + + +//// [declarationEmitEnumReadonlyProperty.d.ts] +declare enum E { + A = "a", + B = "b" +} +declare class C { + readonly type = E.A; +} +declare let x: E.A; diff --git a/tests/baselines/reference/declarationEmitEnumReadonlyProperty.symbols b/tests/baselines/reference/declarationEmitEnumReadonlyProperty.symbols new file mode 100644 index 0000000000000..7d1425ade7860 --- /dev/null +++ b/tests/baselines/reference/declarationEmitEnumReadonlyProperty.symbols @@ -0,0 +1,29 @@ +=== tests/cases/compiler/declarationEmitEnumReadonlyProperty.ts === +enum E { +>E : Symbol(E, Decl(declarationEmitEnumReadonlyProperty.ts, 0, 0)) + + A = 'a', +>A : Symbol(E.A, Decl(declarationEmitEnumReadonlyProperty.ts, 0, 8)) + + B = 'b' +>B : Symbol(E.B, Decl(declarationEmitEnumReadonlyProperty.ts, 1, 12)) +} + +class C { +>C : Symbol(C, Decl(declarationEmitEnumReadonlyProperty.ts, 3, 1)) + + readonly type = E.A; +>type : Symbol(C.type, Decl(declarationEmitEnumReadonlyProperty.ts, 5, 9)) +>E.A : Symbol(E.A, Decl(declarationEmitEnumReadonlyProperty.ts, 0, 8)) +>E : Symbol(E, Decl(declarationEmitEnumReadonlyProperty.ts, 0, 0)) +>A : Symbol(E.A, Decl(declarationEmitEnumReadonlyProperty.ts, 0, 8)) +} + +let x: E.A = new C().type; +>x : Symbol(x, Decl(declarationEmitEnumReadonlyProperty.ts, 9, 3)) +>E : Symbol(E, Decl(declarationEmitEnumReadonlyProperty.ts, 0, 0)) +>A : Symbol(E.A, Decl(declarationEmitEnumReadonlyProperty.ts, 0, 8)) +>new C().type : Symbol(C.type, Decl(declarationEmitEnumReadonlyProperty.ts, 5, 9)) +>C : Symbol(C, Decl(declarationEmitEnumReadonlyProperty.ts, 3, 1)) +>type : Symbol(C.type, Decl(declarationEmitEnumReadonlyProperty.ts, 5, 9)) + diff --git a/tests/baselines/reference/declarationEmitEnumReadonlyProperty.types b/tests/baselines/reference/declarationEmitEnumReadonlyProperty.types new file mode 100644 index 0000000000000..eb8f5528cf9a9 --- /dev/null +++ b/tests/baselines/reference/declarationEmitEnumReadonlyProperty.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/declarationEmitEnumReadonlyProperty.ts === +enum E { +>E : E + + A = 'a', +>A : E.A +>'a' : "a" + + B = 'b' +>B : E.B +>'b' : "b" +} + +class C { +>C : C + + readonly type = E.A; +>type : E.A +>E.A : E.A +>E : typeof E +>A : E.A +} + +let x: E.A = new C().type; +>x : E.A +>E : any +>new C().type : E.A +>new C() : C +>C : typeof C +>type : E.A + diff --git a/tests/baselines/reference/declarationEmitNameConflicts3.types b/tests/baselines/reference/declarationEmitNameConflicts3.types index 4963076d574c7..ea1406674dea3 100644 --- a/tests/baselines/reference/declarationEmitNameConflicts3.types +++ b/tests/baselines/reference/declarationEmitNameConflicts3.types @@ -41,7 +41,7 @@ module M.P { >D : D f ->f : D +>f : D.f } export var v: M.D; // ok >v : M.D diff --git a/tests/baselines/reference/destructuringParameterDeclaration1ES5.types b/tests/baselines/reference/destructuringParameterDeclaration1ES5.types index c0288afccec99..a346856223a65 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration1ES5.types +++ b/tests/baselines/reference/destructuringParameterDeclaration1ES5.types @@ -191,7 +191,7 @@ b7([["string"], 1, [[true, false]]]); // Shouldn't be an error // If the declaration specifies a binding pattern, the parameter type is the implied type of that binding pattern (section 5.1.3) enum Foo { a } >Foo : Foo ->a : Foo +>a : Foo.a function c0({z: {x, y: {j}}}) { } >c0 : ({ z: { x, y: { j } } }: { z: { x: any; y: { j: any; }; }; }) => void diff --git a/tests/baselines/reference/destructuringParameterDeclaration1ES5iterable.types b/tests/baselines/reference/destructuringParameterDeclaration1ES5iterable.types index d7d682fc04820..3797a5da9570e 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration1ES5iterable.types +++ b/tests/baselines/reference/destructuringParameterDeclaration1ES5iterable.types @@ -191,7 +191,7 @@ b7([["string"], 1, [[true, false]]]); // Shouldn't be an error // If the declaration specifies a binding pattern, the parameter type is the implied type of that binding pattern (section 5.1.3) enum Foo { a } >Foo : Foo ->a : Foo +>a : Foo.a function c0({z: {x, y: {j}}}) { } >c0 : ({ z: { x, y: { j } } }: { z: { x: any; y: { j: any; }; }; }) => void diff --git a/tests/baselines/reference/destructuringParameterDeclaration1ES6.types b/tests/baselines/reference/destructuringParameterDeclaration1ES6.types index baa17d8f1251a..04d282c76b75c 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration1ES6.types +++ b/tests/baselines/reference/destructuringParameterDeclaration1ES6.types @@ -174,7 +174,7 @@ b2("string", { x: 200, y: true }); // If the declaration specifies a binding pattern, the parameter type is the implied type of that binding pattern (section 5.1.3) enum Foo { a } >Foo : Foo ->a : Foo +>a : Foo.a function c0({z: {x, y: {j}}}) { } >c0 : ({ z: { x, y: { j } } }: { z: { x: any; y: { j: any; }; }; }) => void diff --git a/tests/baselines/reference/duplicateIdentifierEnum.types b/tests/baselines/reference/duplicateIdentifierEnum.types index 1555c13f3a0b5..4fbe1dac8cc55 100644 --- a/tests/baselines/reference/duplicateIdentifierEnum.types +++ b/tests/baselines/reference/duplicateIdentifierEnum.types @@ -4,7 +4,7 @@ enum A { >A : A bar ->bar : A +>bar : A.bar } class A { >A : A @@ -21,7 +21,7 @@ const enum B { >B : B bar ->bar : B +>bar : B.bar } const enum C { @@ -39,7 +39,7 @@ enum D { >D : D bar ->bar : D +>bar : D.bar } class E { >E : E @@ -59,5 +59,5 @@ enum E { >E : E bar ->bar : E +>bar : E.bar } diff --git a/tests/baselines/reference/duplicateLocalVariable4.types b/tests/baselines/reference/duplicateLocalVariable4.types index 951f24a0b9dc2..57da559f7e842 100644 --- a/tests/baselines/reference/duplicateLocalVariable4.types +++ b/tests/baselines/reference/duplicateLocalVariable4.types @@ -3,7 +3,7 @@ enum E{ >E : E a ->a : E +>a : E.a } var x = E; diff --git a/tests/baselines/reference/duplicatePackage_withErrors.errors.txt b/tests/baselines/reference/duplicatePackage_withErrors.errors.txt index ad24637e98331..89cc598606f42 100644 --- a/tests/baselines/reference/duplicatePackage_withErrors.errors.txt +++ b/tests/baselines/reference/duplicatePackage_withErrors.errors.txt @@ -1,4 +1,4 @@ -/node_modules/a/node_modules/x/index.d.ts(1,18): error TS1254: A 'const' initializer in an ambient context must be a string or numeric literal. +/node_modules/a/node_modules/x/index.d.ts(1,18): error TS1254: A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference. ==== /src/a.ts (0 errors) ==== @@ -11,7 +11,7 @@ ==== /node_modules/a/node_modules/x/index.d.ts (1 errors) ==== export const x = 1 + 1; ~~~~~ -!!! error TS1254: A 'const' initializer in an ambient context must be a string or numeric literal. +!!! error TS1254: A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference. ==== /node_modules/a/node_modules/x/package.json (0 errors) ==== { "name": "x", "version": "1.2.3" } diff --git a/tests/baselines/reference/enumAssignability.types b/tests/baselines/reference/enumAssignability.types index 0f6446c2e51f1..3783a97c5ff2d 100644 --- a/tests/baselines/reference/enumAssignability.types +++ b/tests/baselines/reference/enumAssignability.types @@ -3,11 +3,11 @@ enum E { A } >E : E ->A : E +>A : E.A enum F { B } >F : F ->B : F +>B : F.B var e = E.A; >e : E diff --git a/tests/baselines/reference/enumAssignabilityInInheritance.types b/tests/baselines/reference/enumAssignabilityInInheritance.types index f6c2d999a2e0e..2c792b406dfb2 100644 --- a/tests/baselines/reference/enumAssignabilityInInheritance.types +++ b/tests/baselines/reference/enumAssignabilityInInheritance.types @@ -4,7 +4,7 @@ enum E { A } >E : E ->A : E +>A : E.A interface I0 { [x: string]: E; @@ -243,7 +243,7 @@ var r4 = foo12(E.A); enum E2 { A } >E2 : E2 ->A : E2 +>A : E2.A declare function foo13(x: E2): E2; >foo13 : { (x: E2): E2; (x: E): E; } diff --git a/tests/baselines/reference/enumAssignmentCompat4.types b/tests/baselines/reference/enumAssignmentCompat4.types index 8d96024586224..7ca5a5603b12d 100644 --- a/tests/baselines/reference/enumAssignmentCompat4.types +++ b/tests/baselines/reference/enumAssignmentCompat4.types @@ -6,7 +6,7 @@ namespace M { >MyEnum : MyEnum BAR ->BAR : MyEnum +>BAR : MyEnum.BAR } export var object2 = { >object2 : { foo: MyEnum; } @@ -28,7 +28,7 @@ namespace N { >MyEnum : MyEnum FOO ->FOO : MyEnum +>FOO : MyEnum.FOO }; export var object1 = { diff --git a/tests/baselines/reference/enumBasics.types b/tests/baselines/reference/enumBasics.types index 0ca967cc258fc..1568212a4554c 100644 --- a/tests/baselines/reference/enumBasics.types +++ b/tests/baselines/reference/enumBasics.types @@ -162,10 +162,10 @@ enum E9 { >E9 : E9 A, ->A : E9 +>A : E9.A B = A ->B : E9 +>B : E9.A >A : E9 } diff --git a/tests/baselines/reference/enumClassification.types b/tests/baselines/reference/enumClassification.types index 73c8041a6b7a5..886d5f7342d89 100644 --- a/tests/baselines/reference/enumClassification.types +++ b/tests/baselines/reference/enumClassification.types @@ -10,14 +10,14 @@ enum E01 { >E01 : E01 A ->A : E01 +>A : E01.A } enum E02 { >E02 : E02 A = 123 ->A : E02 +>A : E02.A >123 : 123 } @@ -25,7 +25,7 @@ enum E03 { >E03 : E03 A = "hello" ->A : E03 +>A : E03.A >"hello" : "hello" } diff --git a/tests/baselines/reference/enumConflictsWithGlobalIdentifier.types b/tests/baselines/reference/enumConflictsWithGlobalIdentifier.types index b593384ac3468..73d1595187c64 100644 --- a/tests/baselines/reference/enumConflictsWithGlobalIdentifier.types +++ b/tests/baselines/reference/enumConflictsWithGlobalIdentifier.types @@ -3,7 +3,7 @@ enum Position { >Position : Position IgnoreRulesSpecific = 0, ->IgnoreRulesSpecific : Position +>IgnoreRulesSpecific : Position.IgnoreRulesSpecific >0 : 0 } var x = IgnoreRulesSpecific. diff --git a/tests/baselines/reference/enumConstantMemberWithString.types b/tests/baselines/reference/enumConstantMemberWithString.types index 91bc2f97072f9..4d20d1c6f0f63 100644 --- a/tests/baselines/reference/enumConstantMemberWithString.types +++ b/tests/baselines/reference/enumConstantMemberWithString.types @@ -75,7 +75,7 @@ enum T4 { >T4 : T4 a = "1" ->a : T4 +>a : T4.a >"1" : "1" } @@ -83,7 +83,7 @@ enum T5 { >T5 : T5 a = "1" + "2" ->a : T5 +>a : T5.a >"1" + "2" : string >"1" : "1" >"2" : "2" diff --git a/tests/baselines/reference/enumConstantMemberWithStringEmitDeclaration.types b/tests/baselines/reference/enumConstantMemberWithStringEmitDeclaration.types index b613ec306e47c..5baed333def4c 100644 --- a/tests/baselines/reference/enumConstantMemberWithStringEmitDeclaration.types +++ b/tests/baselines/reference/enumConstantMemberWithStringEmitDeclaration.types @@ -53,7 +53,7 @@ enum T4 { >T4 : T4 a = "1" ->a : T4 +>a : T4.a >"1" : "1" } @@ -61,7 +61,7 @@ enum T5 { >T5 : T5 a = "1" + "2" ->a : T5 +>a : T5.a >"1" + "2" : string >"1" : "1" >"2" : "2" diff --git a/tests/baselines/reference/enumErrors.types b/tests/baselines/reference/enumErrors.types index 8c95ef133ce7a..a219c862233eb 100644 --- a/tests/baselines/reference/enumErrors.types +++ b/tests/baselines/reference/enumErrors.types @@ -27,10 +27,10 @@ enum E9 { >E9 : E9 A, ->A : E9 +>A : E9.A B = A ->B : E9 +>B : E9.A >A : E9 } diff --git a/tests/baselines/reference/enumFromExternalModule.types b/tests/baselines/reference/enumFromExternalModule.types index 05555572aa783..b46753483672e 100644 --- a/tests/baselines/reference/enumFromExternalModule.types +++ b/tests/baselines/reference/enumFromExternalModule.types @@ -14,5 +14,5 @@ var x = f.Mode.Open; === tests/cases/compiler/enumFromExternalModule_0.ts === export enum Mode { Open } >Mode : Mode ->Open : Mode +>Open : Mode.Open diff --git a/tests/baselines/reference/enumGenericTypeClash.types b/tests/baselines/reference/enumGenericTypeClash.types index bb7521fa222a0..9e589503c2f03 100644 --- a/tests/baselines/reference/enumGenericTypeClash.types +++ b/tests/baselines/reference/enumGenericTypeClash.types @@ -4,5 +4,5 @@ class X { } enum X { MyVal } >X : X ->MyVal : X +>MyVal : X.MyVal diff --git a/tests/baselines/reference/enumIsNotASubtypeOfAnythingButNumber.types b/tests/baselines/reference/enumIsNotASubtypeOfAnythingButNumber.types index a44aeee7f3d9e..5df80fd39bd85 100644 --- a/tests/baselines/reference/enumIsNotASubtypeOfAnythingButNumber.types +++ b/tests/baselines/reference/enumIsNotASubtypeOfAnythingButNumber.types @@ -3,7 +3,7 @@ enum E { A } >E : E ->A : E +>A : E.A interface I { [x: string]: any; @@ -133,7 +133,7 @@ interface I13 { enum E2 { A } >E2 : E2 ->A : E2 +>A : E2.A interface I14 { [x: string]: E2; diff --git a/tests/baselines/reference/enumLiteralUnionNotWidened.js b/tests/baselines/reference/enumLiteralUnionNotWidened.js new file mode 100644 index 0000000000000..a58e93324760b --- /dev/null +++ b/tests/baselines/reference/enumLiteralUnionNotWidened.js @@ -0,0 +1,48 @@ +//// [enumLiteralUnionNotWidened.ts] +// repro from #22093 +enum A { one = "one", two = "two" }; +enum B { foo = "foo", bar = "bar" }; + +type C = A | B.foo; +type D = A | "foo"; + +class List +{ + private readonly items: T[] = []; +} + +function asList(arg: T): List { return new List(); } + +// TypeScript incorrectly infers the return type of "asList(x)" to be "List" +// The correct type is "List" +function fn1(x: C): List { return asList(x); } + +// If we use the literal "foo" instead of B.foo, the correct type is inferred +function fn2(x: D): List { return asList(x); } + +//// [enumLiteralUnionNotWidened.js] +// repro from #22093 +var A; +(function (A) { + A["one"] = "one"; + A["two"] = "two"; +})(A || (A = {})); +; +var B; +(function (B) { + B["foo"] = "foo"; + B["bar"] = "bar"; +})(B || (B = {})); +; +var List = /** @class */ (function () { + function List() { + this.items = []; + } + return List; +}()); +function asList(arg) { return new List(); } +// TypeScript incorrectly infers the return type of "asList(x)" to be "List" +// The correct type is "List" +function fn1(x) { return asList(x); } +// If we use the literal "foo" instead of B.foo, the correct type is inferred +function fn2(x) { return asList(x); } diff --git a/tests/baselines/reference/enumLiteralUnionNotWidened.symbols b/tests/baselines/reference/enumLiteralUnionNotWidened.symbols new file mode 100644 index 0000000000000..2a2eb67399a3e --- /dev/null +++ b/tests/baselines/reference/enumLiteralUnionNotWidened.symbols @@ -0,0 +1,61 @@ +=== tests/cases/compiler/enumLiteralUnionNotWidened.ts === +// repro from #22093 +enum A { one = "one", two = "two" }; +>A : Symbol(A, Decl(enumLiteralUnionNotWidened.ts, 0, 0)) +>one : Symbol(A.one, Decl(enumLiteralUnionNotWidened.ts, 1, 8)) +>two : Symbol(A.two, Decl(enumLiteralUnionNotWidened.ts, 1, 21)) + +enum B { foo = "foo", bar = "bar" }; +>B : Symbol(B, Decl(enumLiteralUnionNotWidened.ts, 1, 36)) +>foo : Symbol(B.foo, Decl(enumLiteralUnionNotWidened.ts, 2, 8)) +>bar : Symbol(B.bar, Decl(enumLiteralUnionNotWidened.ts, 2, 21)) + +type C = A | B.foo; +>C : Symbol(C, Decl(enumLiteralUnionNotWidened.ts, 2, 36)) +>A : Symbol(A, Decl(enumLiteralUnionNotWidened.ts, 0, 0)) +>B : Symbol(B, Decl(enumLiteralUnionNotWidened.ts, 1, 36)) +>foo : Symbol(B.foo, Decl(enumLiteralUnionNotWidened.ts, 2, 8)) + +type D = A | "foo"; +>D : Symbol(D, Decl(enumLiteralUnionNotWidened.ts, 4, 19)) +>A : Symbol(A, Decl(enumLiteralUnionNotWidened.ts, 0, 0)) + +class List +>List : Symbol(List, Decl(enumLiteralUnionNotWidened.ts, 5, 19)) +>T : Symbol(T, Decl(enumLiteralUnionNotWidened.ts, 7, 11)) +{ + private readonly items: T[] = []; +>items : Symbol(List.items, Decl(enumLiteralUnionNotWidened.ts, 8, 1)) +>T : Symbol(T, Decl(enumLiteralUnionNotWidened.ts, 7, 11)) +} + +function asList(arg: T): List { return new List(); } +>asList : Symbol(asList, Decl(enumLiteralUnionNotWidened.ts, 10, 1)) +>T : Symbol(T, Decl(enumLiteralUnionNotWidened.ts, 12, 16)) +>arg : Symbol(arg, Decl(enumLiteralUnionNotWidened.ts, 12, 19)) +>T : Symbol(T, Decl(enumLiteralUnionNotWidened.ts, 12, 16)) +>List : Symbol(List, Decl(enumLiteralUnionNotWidened.ts, 5, 19)) +>T : Symbol(T, Decl(enumLiteralUnionNotWidened.ts, 12, 16)) +>List : Symbol(List, Decl(enumLiteralUnionNotWidened.ts, 5, 19)) + +// TypeScript incorrectly infers the return type of "asList(x)" to be "List" +// The correct type is "List" +function fn1(x: C): List { return asList(x); } +>fn1 : Symbol(fn1, Decl(enumLiteralUnionNotWidened.ts, 12, 58)) +>x : Symbol(x, Decl(enumLiteralUnionNotWidened.ts, 16, 13)) +>C : Symbol(C, Decl(enumLiteralUnionNotWidened.ts, 2, 36)) +>List : Symbol(List, Decl(enumLiteralUnionNotWidened.ts, 5, 19)) +>C : Symbol(C, Decl(enumLiteralUnionNotWidened.ts, 2, 36)) +>asList : Symbol(asList, Decl(enumLiteralUnionNotWidened.ts, 10, 1)) +>x : Symbol(x, Decl(enumLiteralUnionNotWidened.ts, 16, 13)) + +// If we use the literal "foo" instead of B.foo, the correct type is inferred +function fn2(x: D): List { return asList(x); } +>fn2 : Symbol(fn2, Decl(enumLiteralUnionNotWidened.ts, 16, 49)) +>x : Symbol(x, Decl(enumLiteralUnionNotWidened.ts, 19, 13)) +>D : Symbol(D, Decl(enumLiteralUnionNotWidened.ts, 4, 19)) +>List : Symbol(List, Decl(enumLiteralUnionNotWidened.ts, 5, 19)) +>D : Symbol(D, Decl(enumLiteralUnionNotWidened.ts, 4, 19)) +>asList : Symbol(asList, Decl(enumLiteralUnionNotWidened.ts, 10, 1)) +>x : Symbol(x, Decl(enumLiteralUnionNotWidened.ts, 19, 13)) + diff --git a/tests/baselines/reference/enumLiteralUnionNotWidened.types b/tests/baselines/reference/enumLiteralUnionNotWidened.types new file mode 100644 index 0000000000000..87443fbd54906 --- /dev/null +++ b/tests/baselines/reference/enumLiteralUnionNotWidened.types @@ -0,0 +1,54 @@ +=== tests/cases/compiler/enumLiteralUnionNotWidened.ts === +// repro from #22093 +enum A { one = "one", two = "two" }; +>A : A +>one : A.one +>"one" : "one" +>two : A.two +>"two" : "two" + +enum B { foo = "foo", bar = "bar" }; +>B : B +>foo : B.foo +>"foo" : "foo" +>bar : B.bar +>"bar" : "bar" + +type C = A | B.foo; +>C : C +>B : any + +type D = A | "foo"; +>D : D + +class List +>List : List +{ + private readonly items: T[] = []; +>items : T[] +>[] : undefined[] +} + +function asList(arg: T): List { return new List(); } +>asList : (arg: T) => List +>arg : T +>new List() : List +>List : typeof List + +// TypeScript incorrectly infers the return type of "asList(x)" to be "List" +// The correct type is "List" +function fn1(x: C): List { return asList(x); } +>fn1 : (x: C) => List +>x : C +>asList(x) : List +>asList : (arg: T) => List +>x : C + +// If we use the literal "foo" instead of B.foo, the correct type is inferred +function fn2(x: D): List { return asList(x); } +>fn2 : (x: D) => List +>x : D +>asList(x) : List +>asList : (arg: T) => List +>x : D + diff --git a/tests/baselines/reference/enumMemberResolution.types b/tests/baselines/reference/enumMemberResolution.types index 0d761573973b7..e0a53f1d5ff80 100644 --- a/tests/baselines/reference/enumMemberResolution.types +++ b/tests/baselines/reference/enumMemberResolution.types @@ -3,7 +3,7 @@ enum Position2 { >Position2 : Position2 IgnoreRulesSpecific = 0 ->IgnoreRulesSpecific : Position2 +>IgnoreRulesSpecific : Position2.IgnoreRulesSpecific >0 : 0 } var x = IgnoreRulesSpecific. // error diff --git a/tests/baselines/reference/enumMergingErrors.types b/tests/baselines/reference/enumMergingErrors.types index 3603f01fb5a71..34fa6fe671bda 100644 --- a/tests/baselines/reference/enumMergingErrors.types +++ b/tests/baselines/reference/enumMergingErrors.types @@ -64,7 +64,7 @@ module M1 { export enum E1 { A = 0 } >E1 : E1 ->A : E1 +>A : E1.A >0 : 0 } module M1 { @@ -72,14 +72,14 @@ module M1 { export enum E1 { B } >E1 : E1 ->B : E1 +>B : E1.A } module M1 { >M1 : typeof M1 export enum E1 { C } >E1 : E1 ->C : E1 +>C : E1.A } @@ -89,14 +89,14 @@ module M2 { export enum E1 { A } >E1 : E1 ->A : E1 +>A : E1.A } module M2 { >M2 : typeof M2 export enum E1 { B = 0 } >E1 : E1 ->B : E1 +>B : E1.A >0 : 0 } module M2 { @@ -104,7 +104,7 @@ module M2 { export enum E1 { C } >E1 : E1 ->C : E1 +>C : E1.A } diff --git a/tests/baselines/reference/enumOperations.types b/tests/baselines/reference/enumOperations.types index 261b5149ebd1a..e4afed35b1073 100644 --- a/tests/baselines/reference/enumOperations.types +++ b/tests/baselines/reference/enumOperations.types @@ -1,7 +1,7 @@ === tests/cases/compiler/enumOperations.ts === enum Enum { None = 0 } >Enum : Enum ->None : Enum +>None : Enum.None >0 : 0 var enumType: Enum = Enum.None; diff --git a/tests/baselines/reference/enumWithInfinityProperty.types b/tests/baselines/reference/enumWithInfinityProperty.types index 664aa5ea2d5e3..ea4dc8a1dde95 100644 --- a/tests/baselines/reference/enumWithInfinityProperty.types +++ b/tests/baselines/reference/enumWithInfinityProperty.types @@ -3,7 +3,7 @@ enum A { >A : A Infinity = 1 ->Infinity : A +>Infinity : A.Infinity >1 : 1 } diff --git a/tests/baselines/reference/enumWithNaNProperty.types b/tests/baselines/reference/enumWithNaNProperty.types index 710c7554a3127..5233d30473ac6 100644 --- a/tests/baselines/reference/enumWithNaNProperty.types +++ b/tests/baselines/reference/enumWithNaNProperty.types @@ -3,7 +3,7 @@ enum A { >A : A NaN = 1 ->NaN : A +>NaN : A.NaN >1 : 1 } diff --git a/tests/baselines/reference/enumWithNegativeInfinityProperty.types b/tests/baselines/reference/enumWithNegativeInfinityProperty.types index 951f8969769a8..55a3f3c563355 100644 --- a/tests/baselines/reference/enumWithNegativeInfinityProperty.types +++ b/tests/baselines/reference/enumWithNegativeInfinityProperty.types @@ -3,7 +3,7 @@ enum A { >A : A "-Infinity" = 1 ->"-Infinity" : A +>"-Infinity" : A.-Infinity >1 : 1 } diff --git a/tests/baselines/reference/enumWithQuotedElementName1.types b/tests/baselines/reference/enumWithQuotedElementName1.types index 4e3db0ca4822d..2452f3882d5ad 100644 --- a/tests/baselines/reference/enumWithQuotedElementName1.types +++ b/tests/baselines/reference/enumWithQuotedElementName1.types @@ -3,5 +3,5 @@ enum E { >E : E 'fo"o', ->'fo"o' : E +>'fo"o' : E.fo"o } diff --git a/tests/baselines/reference/enumWithQuotedElementName2.types b/tests/baselines/reference/enumWithQuotedElementName2.types index 9b07138e5abbd..0c34e07188c22 100644 --- a/tests/baselines/reference/enumWithQuotedElementName2.types +++ b/tests/baselines/reference/enumWithQuotedElementName2.types @@ -3,5 +3,5 @@ enum E { >E : E "fo'o", ->"fo'o" : E +>"fo'o" : E.fo'o } diff --git a/tests/baselines/reference/enumWithUnicodeEscape1.types b/tests/baselines/reference/enumWithUnicodeEscape1.types index ee9dbbf5c2a08..e989936dd85e8 100644 --- a/tests/baselines/reference/enumWithUnicodeEscape1.types +++ b/tests/baselines/reference/enumWithUnicodeEscape1.types @@ -3,6 +3,6 @@ enum E { >E : E 'gold \u2730' ->'gold \u2730' : E +>'gold \u2730' : E.gold ✰ } diff --git a/tests/baselines/reference/enumsWithMultipleDeclarations1.types b/tests/baselines/reference/enumsWithMultipleDeclarations1.types index 1df52e22c828a..552122bdc2014 100644 --- a/tests/baselines/reference/enumsWithMultipleDeclarations1.types +++ b/tests/baselines/reference/enumsWithMultipleDeclarations1.types @@ -3,19 +3,19 @@ enum E { >E : E A ->A : E +>A : E.A } enum E { >E : E B ->B : E +>B : E.A } enum E { >E : E C ->C : E +>C : E.A } diff --git a/tests/baselines/reference/enumsWithMultipleDeclarations3.types b/tests/baselines/reference/enumsWithMultipleDeclarations3.types index 4f8f0ce5f589d..b21e60afd24ea 100644 --- a/tests/baselines/reference/enumsWithMultipleDeclarations3.types +++ b/tests/baselines/reference/enumsWithMultipleDeclarations3.types @@ -6,5 +6,5 @@ enum E { >E : E A ->A : E +>A : E.A } diff --git a/tests/baselines/reference/es6modulekindWithES5Target5.types b/tests/baselines/reference/es6modulekindWithES5Target5.types index b5e695987882f..74f4e8b34a652 100644 --- a/tests/baselines/reference/es6modulekindWithES5Target5.types +++ b/tests/baselines/reference/es6modulekindWithES5Target5.types @@ -3,12 +3,12 @@ export enum E1 { >E1 : E1 value1 ->value1 : E1 +>value1 : E1.value1 } export const enum E2 { >E2 : E2 value1 ->value1 : E2 +>value1 : E2.value1 } diff --git a/tests/baselines/reference/esnextmodulekindWithES5Target5.types b/tests/baselines/reference/esnextmodulekindWithES5Target5.types index c838a953ef9c3..bfeec26a51985 100644 --- a/tests/baselines/reference/esnextmodulekindWithES5Target5.types +++ b/tests/baselines/reference/esnextmodulekindWithES5Target5.types @@ -3,12 +3,12 @@ export enum E1 { >E1 : E1 value1 ->value1 : E1 +>value1 : E1.value1 } export const enum E2 { >E2 : E2 value1 ->value1 : E2 +>value1 : E2.value1 } diff --git a/tests/baselines/reference/everyTypeAssignableToAny.types b/tests/baselines/reference/everyTypeAssignableToAny.types index c38e2bb0f616e..574d77bc7e4dc 100644 --- a/tests/baselines/reference/everyTypeAssignableToAny.types +++ b/tests/baselines/reference/everyTypeAssignableToAny.types @@ -20,7 +20,7 @@ var ai: I; enum E { A } >E : E ->A : E +>A : E.A var ae: E; >ae : E diff --git a/tests/baselines/reference/exportCodeGen.types b/tests/baselines/reference/exportCodeGen.types index 782ac5ff4995c..99c912f986474 100644 --- a/tests/baselines/reference/exportCodeGen.types +++ b/tests/baselines/reference/exportCodeGen.types @@ -66,7 +66,7 @@ module E { export enum Color { Red } >Color : Color ->Red : Color +>Red : Color.Red export function fn() { } >fn : () => void @@ -94,7 +94,7 @@ module F { enum Color { Red } >Color : Color ->Red : Color +>Red : Color.Red function fn() { } >fn : () => void diff --git a/tests/baselines/reference/for-of47.types b/tests/baselines/reference/for-of47.types index 9f98a2c63b409..b235d772e848b 100644 --- a/tests/baselines/reference/for-of47.types +++ b/tests/baselines/reference/for-of47.types @@ -14,7 +14,7 @@ var array = [{ x: "", y: true }] enum E { x } >E : E ->x : E +>x : E.x for ({x, y: y = E.x} of array) { >{x, y: y = E.x} : { x: string; y?: E; } diff --git a/tests/baselines/reference/for-of48.types b/tests/baselines/reference/for-of48.types index af93d4968f249..575ea99064f44 100644 --- a/tests/baselines/reference/for-of48.types +++ b/tests/baselines/reference/for-of48.types @@ -14,7 +14,7 @@ var array = [{ x: "", y: true }] enum E { x } >E : E ->x : E +>x : E.x for ({x, y = E.x} of array) { >{x, y = E.x} : { x: string; y?: number; } diff --git a/tests/baselines/reference/genericCallWithGenericSignatureArguments2.types b/tests/baselines/reference/genericCallWithGenericSignatureArguments2.types index 20d5853061568..64acb69d4e600 100644 --- a/tests/baselines/reference/genericCallWithGenericSignatureArguments2.types +++ b/tests/baselines/reference/genericCallWithGenericSignatureArguments2.types @@ -106,11 +106,11 @@ module onlyT { enum E { A } >E : E ->A : E +>A : E.A enum F { A } >F : F ->A : F +>A : F.A function foo3(x: T, a: (x: T) => T, b: (x: T) => T) { >foo3 : (x: T, a: (x: T) => T, b: (x: T) => T) => (x: T) => T @@ -250,11 +250,11 @@ module TU { enum E { A } >E : E ->A : E +>A : E.A enum F { A } >F : F ->A : F +>A : F.A function foo3(x: T, a: (x: T) => T, b: (x: U) => U) { >foo3 : (x: T, a: (x: T) => T, b: (x: any) => any) => (x: T) => T diff --git a/tests/baselines/reference/genericCallWithGenericSignatureArguments3.types b/tests/baselines/reference/genericCallWithGenericSignatureArguments3.types index 4379594f6eb9d..5bd041097239a 100644 --- a/tests/baselines/reference/genericCallWithGenericSignatureArguments3.types +++ b/tests/baselines/reference/genericCallWithGenericSignatureArguments3.types @@ -93,11 +93,11 @@ var r5 = foo(new Object(), (x) => '', (x) => ''); // Object => Object enum E { A } >E : E ->A : E +>A : E.A enum F { A } >F : F ->A : F +>A : F.A var r6 = foo(E.A, (x: number) => E.A, (x: F) => F.A); // number => number >r6 : (x: number) => number diff --git a/tests/baselines/reference/inOperatorWithInvalidOperands.types b/tests/baselines/reference/inOperatorWithInvalidOperands.types index f5c8ff8fb88bd..d85ec6d7a3db9 100644 --- a/tests/baselines/reference/inOperatorWithInvalidOperands.types +++ b/tests/baselines/reference/inOperatorWithInvalidOperands.types @@ -1,7 +1,7 @@ === tests/cases/conformance/expressions/binaryOperators/inOperator/inOperatorWithInvalidOperands.ts === enum E { a } >E : E ->a : E +>a : E.a var x: any; >x : any diff --git a/tests/baselines/reference/interfaceWithPropertyOfEveryType.types b/tests/baselines/reference/interfaceWithPropertyOfEveryType.types index 6df43d9e39aad..28fddbce52a64 100644 --- a/tests/baselines/reference/interfaceWithPropertyOfEveryType.types +++ b/tests/baselines/reference/interfaceWithPropertyOfEveryType.types @@ -15,7 +15,7 @@ module M { } enum E { A } >E : E ->A : E +>A : E.A interface Foo { a: number; @@ -70,7 +70,7 @@ interface Foo { var a: Foo = { >a : Foo ->{ a: 1, b: '', c: true, d: {}, e: null , f: [1], g: {}, h: (x: number) => 1, i: (x: T) => x, j: null, k: new C(), l: f1, m: M, n: {}, o: E.A} : { a: number; b: string; c: true; d: {}; e: null; f: number[]; g: {}; h: (x: number) => number; i: (x: T) => T; j: Foo; k: C; l: () => void; m: typeof M; n: {}; o: E; } +>{ a: 1, b: '', c: true, d: {}, e: null , f: [1], g: {}, h: (x: number) => 1, i: (x: T) => x, j: null, k: new C(), l: f1, m: M, n: {}, o: E.A} : { a: number; b: string; c: true; d: {}; e: null; f: number[]; g: {}; h: (x: number) => number; i: (x: T) => T; j: Foo; k: C; l: () => void; m: typeof M; n: {}; o: E.A; } a: 1, >a : number @@ -136,7 +136,7 @@ var a: Foo = { >{} : {} o: E.A ->o : E +>o : E.A >E.A : E >E : typeof E >A : E diff --git a/tests/baselines/reference/invalidBooleanAssignments.types b/tests/baselines/reference/invalidBooleanAssignments.types index 1b91002ffba7a..439d93e5408ca 100644 --- a/tests/baselines/reference/invalidBooleanAssignments.types +++ b/tests/baselines/reference/invalidBooleanAssignments.types @@ -22,7 +22,7 @@ var d: typeof undefined = x; enum E { A } >E : E ->A : E +>A : E.A var e: E = x; >e : E diff --git a/tests/baselines/reference/invalidStringAssignments.types b/tests/baselines/reference/invalidStringAssignments.types index 4f749b6528dcf..66510d029c979 100644 --- a/tests/baselines/reference/invalidStringAssignments.types +++ b/tests/baselines/reference/invalidStringAssignments.types @@ -71,7 +71,7 @@ i = x; enum E { A } >E : E ->A : E +>A : E.A var j: E = x; >j : E diff --git a/tests/baselines/reference/invalidUndefinedAssignments.types b/tests/baselines/reference/invalidUndefinedAssignments.types index fdb8e160be0ff..ab19dd824e111 100644 --- a/tests/baselines/reference/invalidUndefinedAssignments.types +++ b/tests/baselines/reference/invalidUndefinedAssignments.types @@ -5,7 +5,7 @@ var x: typeof undefined; enum E { A } >E : E ->A : E +>A : E.A E = x; >E = x : any diff --git a/tests/baselines/reference/invalidUndefinedValues.types b/tests/baselines/reference/invalidUndefinedValues.types index f93b3a4c24428..3cb51ebeb298b 100644 --- a/tests/baselines/reference/invalidUndefinedValues.types +++ b/tests/baselines/reference/invalidUndefinedValues.types @@ -91,7 +91,7 @@ x = f; enum E { A } >E : E ->A : E +>A : E.A x = E; >x = E : typeof E diff --git a/tests/baselines/reference/invalidVoidAssignments.types b/tests/baselines/reference/invalidVoidAssignments.types index 02c80b7f94206..0711f912f3e4e 100644 --- a/tests/baselines/reference/invalidVoidAssignments.types +++ b/tests/baselines/reference/invalidVoidAssignments.types @@ -70,7 +70,7 @@ i = x; enum E { A } >E : E ->A : E +>A : E.A x = E; >x = E : typeof E diff --git a/tests/baselines/reference/invalidVoidValues.types b/tests/baselines/reference/invalidVoidValues.types index 9f0988cf35f58..ab539e61d4f9b 100644 --- a/tests/baselines/reference/invalidVoidValues.types +++ b/tests/baselines/reference/invalidVoidValues.types @@ -19,7 +19,7 @@ x = true; enum E { A } >E : E ->A : E +>A : E.A x = E; >x = E : typeof E diff --git a/tests/baselines/reference/isolatedModulesAmbientConstEnum.types b/tests/baselines/reference/isolatedModulesAmbientConstEnum.types index ea849088d502d..8b714d98f6eca 100644 --- a/tests/baselines/reference/isolatedModulesAmbientConstEnum.types +++ b/tests/baselines/reference/isolatedModulesAmbientConstEnum.types @@ -1,7 +1,7 @@ === tests/cases/compiler/file1.ts === declare const enum E { X = 1} >E : E ->X : E +>X : E.X >1 : 1 export var y; diff --git a/tests/baselines/reference/isolatedModulesNonAmbientConstEnum.types b/tests/baselines/reference/isolatedModulesNonAmbientConstEnum.types index 1ac53071e4c47..0c5f566fee991 100644 --- a/tests/baselines/reference/isolatedModulesNonAmbientConstEnum.types +++ b/tests/baselines/reference/isolatedModulesNonAmbientConstEnum.types @@ -1,7 +1,7 @@ === tests/cases/compiler/file1.ts === const enum E { X = 100 }; >E : E ->X : E +>X : E.X >100 : 100 var e = E.X; diff --git a/tests/baselines/reference/jsdocAccessEnumType.types b/tests/baselines/reference/jsdocAccessEnumType.types index a08c2b4e17930..7ceabb3c7b7ab 100644 --- a/tests/baselines/reference/jsdocAccessEnumType.types +++ b/tests/baselines/reference/jsdocAccessEnumType.types @@ -1,7 +1,7 @@ === /a.ts === export enum E { A } >E : E ->A : E +>A : E.A === /b.js === import { E } from "./a"; diff --git a/tests/baselines/reference/logicalOrOperatorWithEveryType.types b/tests/baselines/reference/logicalOrOperatorWithEveryType.types index 354ede6636536..d84dc46ef732a 100644 --- a/tests/baselines/reference/logicalOrOperatorWithEveryType.types +++ b/tests/baselines/reference/logicalOrOperatorWithEveryType.types @@ -126,7 +126,7 @@ var rb5 = a5 || a2; // void || boolean is void | boolean >a2 : boolean var rb6 = a6 || a2; // enum || boolean is E | boolean ->rb6 : boolean | E +>rb6 : boolean | E.b | E.c >a6 || a2 : boolean | E.b | E.c >a6 : E >a2 : boolean @@ -246,7 +246,7 @@ var rd5 = a5 || a4; // void || string is void | string >a4 : string var rd6 = a6 || a4; // enum || string is enum | string ->rd6 : string | E +>rd6 : string | E.b | E.c >a6 || a4 : string | E.b | E.c >a6 : E >a4 : string @@ -306,7 +306,7 @@ var re5 = a5 || a5; // void || void is void >a5 : void var re6 = a6 || a5; // enum || void is enum | void ->re6 : void | E +>re6 : void | E.b | E.c >a6 || a5 : void | E.b | E.c >a6 : E >a5 : void @@ -426,7 +426,7 @@ var rh5 = a5 || a7; // void || object is void | object >a7 : { a: string; } var rh6 = a6 || a7; // enum || object is enum | object ->rh6 : E | { a: string; } +>rh6 : E.b | E.c | { a: string; } >a6 || a7 : E.b | E.c | { a: string; } >a6 : E >a7 : { a: string; } @@ -486,7 +486,7 @@ var ri5 = a5 || a8; // void || array is void | array >a8 : string[] var ri6 = a6 || a8; // enum || array is enum | array ->ri6 : E | string[] +>ri6 : E.b | E.c | string[] >a6 || a8 : E.b | E.c | string[] >a6 : E >a8 : string[] @@ -546,7 +546,7 @@ var rj5 = a5 || null; // void || null is void >null : null var rj6 = a6 || null; // enum || null is E ->rj6 : E +>rj6 : E.b | E.c >a6 || null : E.b | E.c >a6 : E >null : null @@ -606,7 +606,7 @@ var rf5 = a5 || undefined; // void || undefined is void >undefined : undefined var rf6 = a6 || undefined; // enum || undefined is E ->rf6 : E +>rf6 : E.b | E.c >a6 || undefined : E.b | E.c >a6 : E >undefined : undefined diff --git a/tests/baselines/reference/mergeWithImportedType.types b/tests/baselines/reference/mergeWithImportedType.types index ff64780928709..7ba671ce46850 100644 --- a/tests/baselines/reference/mergeWithImportedType.types +++ b/tests/baselines/reference/mergeWithImportedType.types @@ -1,7 +1,7 @@ === tests/cases/compiler/f1.ts === export enum E {X} >E : E ->X : E +>X : E.X === tests/cases/compiler/f2.ts === import {E} from "./f1"; diff --git a/tests/baselines/reference/mergedDeclarations2.types b/tests/baselines/reference/mergedDeclarations2.types index 15b548fa724bc..5d82d475d851a 100644 --- a/tests/baselines/reference/mergedDeclarations2.types +++ b/tests/baselines/reference/mergedDeclarations2.types @@ -3,13 +3,13 @@ enum Foo { >Foo : Foo b ->b : Foo +>b : Foo.b } enum Foo { >Foo : Foo a = b ->a : Foo +>a : Foo.b >b : Foo } diff --git a/tests/baselines/reference/mergedEnumDeclarationCodeGen.types b/tests/baselines/reference/mergedEnumDeclarationCodeGen.types index 84e6a8237e58d..1449ddcad6c52 100644 --- a/tests/baselines/reference/mergedEnumDeclarationCodeGen.types +++ b/tests/baselines/reference/mergedEnumDeclarationCodeGen.types @@ -3,16 +3,16 @@ enum E { >E : E a, ->a : E +>a : E.a b = a ->b : E +>b : E.a >a : E } enum E { >E : E c = a ->c : E +>c : E.a >a : E } diff --git a/tests/baselines/reference/moduleCodeGenTest5.types b/tests/baselines/reference/moduleCodeGenTest5.types index b49c0c895d225..c0d806d93982c 100644 --- a/tests/baselines/reference/moduleCodeGenTest5.types +++ b/tests/baselines/reference/moduleCodeGenTest5.types @@ -36,7 +36,7 @@ class C2{ export enum E1 {A=0} >E1 : E1 ->A : E1 +>A : E1.A >0 : 0 var u = E1.A; @@ -47,7 +47,7 @@ var u = E1.A; enum E2 {B=0} >E2 : E2 ->B : E2 +>B : E2.B >0 : 0 var v = E2.B; diff --git a/tests/baselines/reference/noImplicitAnyIndexing.types b/tests/baselines/reference/noImplicitAnyIndexing.types index 702c763c7a822..2bd27cb0c0b47 100644 --- a/tests/baselines/reference/noImplicitAnyIndexing.types +++ b/tests/baselines/reference/noImplicitAnyIndexing.types @@ -3,7 +3,7 @@ enum MyEmusEnum { >MyEmusEnum : MyEmusEnum emu ->emu : MyEmusEnum +>emu : MyEmusEnum.emu } // Should be okay; should be a string. diff --git a/tests/baselines/reference/noImplicitAnyIndexingSuppressed.types b/tests/baselines/reference/noImplicitAnyIndexingSuppressed.types index fe34cdbc130b9..fe10152e90c70 100644 --- a/tests/baselines/reference/noImplicitAnyIndexingSuppressed.types +++ b/tests/baselines/reference/noImplicitAnyIndexingSuppressed.types @@ -3,7 +3,7 @@ enum MyEmusEnum { >MyEmusEnum : MyEmusEnum emu ->emu : MyEmusEnum +>emu : MyEmusEnum.emu } // Should be okay; should be a string. diff --git a/tests/baselines/reference/nonExportedElementsOfMergedModules.types b/tests/baselines/reference/nonExportedElementsOfMergedModules.types index e0a11ecb6de0e..cd929474fac1d 100644 --- a/tests/baselines/reference/nonExportedElementsOfMergedModules.types +++ b/tests/baselines/reference/nonExportedElementsOfMergedModules.types @@ -4,7 +4,7 @@ module One { enum A { X } >A : A ->X : A +>X : A.X module B { >B : typeof B @@ -19,7 +19,7 @@ module One { enum A { Y } >A : A ->Y : A +>Y : A.Y module B { >B : typeof B diff --git a/tests/baselines/reference/nullAssignableToEveryType.types b/tests/baselines/reference/nullAssignableToEveryType.types index 1dd8cf400e708..e39c5121b2cde 100644 --- a/tests/baselines/reference/nullAssignableToEveryType.types +++ b/tests/baselines/reference/nullAssignableToEveryType.types @@ -17,7 +17,7 @@ var ai: I; enum E { A } >E : E ->A : E +>A : E.A var ae: E; >ae : E diff --git a/tests/baselines/reference/nullIsSubtypeOfEverythingButUndefined.types b/tests/baselines/reference/nullIsSubtypeOfEverythingButUndefined.types index f598b4d7782f5..8139c9bcd7602 100644 --- a/tests/baselines/reference/nullIsSubtypeOfEverythingButUndefined.types +++ b/tests/baselines/reference/nullIsSubtypeOfEverythingButUndefined.types @@ -219,7 +219,7 @@ var r12 = true ? null : c2; enum E { A } >E : E ->A : E +>A : E.A var r13 = true ? E : null; >r13 : typeof E diff --git a/tests/baselines/reference/numberAssignableToEnum.types b/tests/baselines/reference/numberAssignableToEnum.types index 44fa0ed042e8b..8b70b7f0e68ad 100644 --- a/tests/baselines/reference/numberAssignableToEnum.types +++ b/tests/baselines/reference/numberAssignableToEnum.types @@ -1,7 +1,7 @@ === tests/cases/conformance/types/typeRelationships/assignmentCompatibility/numberAssignableToEnum.ts === enum E { A } >E : E ->A : E +>A : E.A var n: number; >n : number diff --git a/tests/baselines/reference/objectTypesIdentity2.types b/tests/baselines/reference/objectTypesIdentity2.types index 3877fade0db19..aa61a461507f9 100644 --- a/tests/baselines/reference/objectTypesIdentity2.types +++ b/tests/baselines/reference/objectTypesIdentity2.types @@ -33,7 +33,7 @@ var a: { foo: RegExp; } enum E { A } >E : E ->A : E +>A : E.A var b = { foo: E.A }; >b : { foo: E; } diff --git a/tests/baselines/reference/operatorAddNullUndefined.errors.txt b/tests/baselines/reference/operatorAddNullUndefined.errors.txt index c6a74080394e0..acd65de341789 100644 --- a/tests/baselines/reference/operatorAddNullUndefined.errors.txt +++ b/tests/baselines/reference/operatorAddNullUndefined.errors.txt @@ -6,10 +6,10 @@ tests/cases/compiler/operatorAddNullUndefined.ts(6,10): error TS2365: Operator ' tests/cases/compiler/operatorAddNullUndefined.ts(7,10): error TS2365: Operator '+' cannot be applied to types '1' and 'undefined'. tests/cases/compiler/operatorAddNullUndefined.ts(8,10): error TS2365: Operator '+' cannot be applied to types 'null' and '1'. tests/cases/compiler/operatorAddNullUndefined.ts(9,10): error TS2365: Operator '+' cannot be applied to types 'undefined' and '1'. -tests/cases/compiler/operatorAddNullUndefined.ts(14,11): error TS2365: Operator '+' cannot be applied to types 'null' and 'E'. -tests/cases/compiler/operatorAddNullUndefined.ts(15,11): error TS2365: Operator '+' cannot be applied to types 'undefined' and 'E'. -tests/cases/compiler/operatorAddNullUndefined.ts(16,11): error TS2365: Operator '+' cannot be applied to types 'E' and 'null'. -tests/cases/compiler/operatorAddNullUndefined.ts(17,11): error TS2365: Operator '+' cannot be applied to types 'E' and 'undefined'. +tests/cases/compiler/operatorAddNullUndefined.ts(14,11): error TS2365: Operator '+' cannot be applied to types 'null' and 'E.x'. +tests/cases/compiler/operatorAddNullUndefined.ts(15,11): error TS2365: Operator '+' cannot be applied to types 'undefined' and 'E.x'. +tests/cases/compiler/operatorAddNullUndefined.ts(16,11): error TS2365: Operator '+' cannot be applied to types 'E.x' and 'null'. +tests/cases/compiler/operatorAddNullUndefined.ts(17,11): error TS2365: Operator '+' cannot be applied to types 'E.x' and 'undefined'. ==== tests/cases/compiler/operatorAddNullUndefined.ts (12 errors) ==== @@ -44,13 +44,13 @@ tests/cases/compiler/operatorAddNullUndefined.ts(17,11): error TS2365: Operator var x12 = undefined + "test"; var x13 = null + E.x ~~~~~~~~~~ -!!! error TS2365: Operator '+' cannot be applied to types 'null' and 'E'. +!!! error TS2365: Operator '+' cannot be applied to types 'null' and 'E.x'. var x14 = undefined + E.x ~~~~~~~~~~~~~~~ -!!! error TS2365: Operator '+' cannot be applied to types 'undefined' and 'E'. +!!! error TS2365: Operator '+' cannot be applied to types 'undefined' and 'E.x'. var x15 = E.x + null ~~~~~~~~~~ -!!! error TS2365: Operator '+' cannot be applied to types 'E' and 'null'. +!!! error TS2365: Operator '+' cannot be applied to types 'E.x' and 'null'. var x16 = E.x + undefined ~~~~~~~~~~~~~~~ -!!! error TS2365: Operator '+' cannot be applied to types 'E' and 'undefined'. \ No newline at end of file +!!! error TS2365: Operator '+' cannot be applied to types 'E.x' and 'undefined'. \ No newline at end of file diff --git a/tests/baselines/reference/operatorAddNullUndefined.types b/tests/baselines/reference/operatorAddNullUndefined.types index 63b389f70f40e..c24acd2a7ecc9 100644 --- a/tests/baselines/reference/operatorAddNullUndefined.types +++ b/tests/baselines/reference/operatorAddNullUndefined.types @@ -1,7 +1,7 @@ === tests/cases/compiler/operatorAddNullUndefined.ts === enum E { x } >E : E ->x : E +>x : E.x var x1 = null + null; >x1 : any diff --git a/tests/baselines/reference/parseEntityNameWithReservedWord.types b/tests/baselines/reference/parseEntityNameWithReservedWord.types index 551125c55ac0f..e3024dae16e1d 100644 --- a/tests/baselines/reference/parseEntityNameWithReservedWord.types +++ b/tests/baselines/reference/parseEntityNameWithReservedWord.types @@ -1,7 +1,7 @@ === tests/cases/compiler/parseEntityNameWithReservedWord.ts === enum Bool { false } >Bool : Bool ->false : Bool +>false : Bool.false const x: Bool.false = Bool.false; >x : Bool diff --git a/tests/baselines/reference/parserComputedPropertyName16.types b/tests/baselines/reference/parserComputedPropertyName16.types index b6440d89f0f41..0ccd4470d9dec 100644 --- a/tests/baselines/reference/parserComputedPropertyName16.types +++ b/tests/baselines/reference/parserComputedPropertyName16.types @@ -3,7 +3,7 @@ enum E { >E : E [e] = 1 ->[e] : E +>[e] : E.__computed >e : any >1 : 1 } diff --git a/tests/baselines/reference/parserES5ComputedPropertyName6.types b/tests/baselines/reference/parserES5ComputedPropertyName6.types index cbfa5ec1f8d70..61d9fa24b9aed 100644 --- a/tests/baselines/reference/parserES5ComputedPropertyName6.types +++ b/tests/baselines/reference/parserES5ComputedPropertyName6.types @@ -3,7 +3,7 @@ enum E { >E : E [e] = 1 ->[e] : E +>[e] : E.__computed >e : any >1 : 1 } diff --git a/tests/baselines/reference/parserEnum5.types b/tests/baselines/reference/parserEnum5.types index 5d9e30c09321e..c49a62333e0d6 100644 --- a/tests/baselines/reference/parserEnum5.types +++ b/tests/baselines/reference/parserEnum5.types @@ -1,7 +1,7 @@ === tests/cases/conformance/parser/ecmascript5/EnumDeclarations/parserEnum5.ts === enum E2 { a, } >E2 : E2 ->a : E2 +>a : E2.a enum E3 { a: 1, } >E3 : E3 diff --git a/tests/baselines/reference/parserEnumDeclaration3.d.types b/tests/baselines/reference/parserEnumDeclaration3.d.types index 4b741ec38ef47..090556475eab3 100644 --- a/tests/baselines/reference/parserEnumDeclaration3.d.types +++ b/tests/baselines/reference/parserEnumDeclaration3.d.types @@ -3,6 +3,6 @@ enum E { >E : E A = 1 ->A : E +>A : E.A >1 : 1 } diff --git a/tests/baselines/reference/parserEnumDeclaration3.types b/tests/baselines/reference/parserEnumDeclaration3.types index 027f837229f73..de3e32fcbcf05 100644 --- a/tests/baselines/reference/parserEnumDeclaration3.types +++ b/tests/baselines/reference/parserEnumDeclaration3.types @@ -3,6 +3,6 @@ declare enum E { >E : E A = 1 ->A : E +>A : E.A >1 : 1 } diff --git a/tests/baselines/reference/parserInterfaceKeywordInEnum.types b/tests/baselines/reference/parserInterfaceKeywordInEnum.types index aa71126883df7..f648c3d279636 100644 --- a/tests/baselines/reference/parserInterfaceKeywordInEnum.types +++ b/tests/baselines/reference/parserInterfaceKeywordInEnum.types @@ -3,6 +3,6 @@ enum Bar { >Bar : Bar interface, ->interface : Bar +>interface : Bar.interface } diff --git a/tests/baselines/reference/parserInterfaceKeywordInEnum1.types b/tests/baselines/reference/parserInterfaceKeywordInEnum1.types index 57c4ef2ebec74..687e01b465448 100644 --- a/tests/baselines/reference/parserInterfaceKeywordInEnum1.types +++ b/tests/baselines/reference/parserInterfaceKeywordInEnum1.types @@ -6,6 +6,6 @@ enum Bar { >Bar : Bar interface, ->interface : Bar +>interface : Bar.interface } diff --git a/tests/baselines/reference/preserveConstEnums.types b/tests/baselines/reference/preserveConstEnums.types index 9f2d30a36045b..ded9ca90d742e 100644 --- a/tests/baselines/reference/preserveConstEnums.types +++ b/tests/baselines/reference/preserveConstEnums.types @@ -3,8 +3,8 @@ const enum E { >E : E Value = 1, Value2 = Value ->Value : E +>Value : E.Value >1 : 1 ->Value2 : E +>Value2 : E.Value >Value : E } diff --git a/tests/baselines/reference/primtiveTypesAreIdentical.types b/tests/baselines/reference/primtiveTypesAreIdentical.types index f84a6257b8ccc..43b9f2e785a7b 100644 --- a/tests/baselines/reference/primtiveTypesAreIdentical.types +++ b/tests/baselines/reference/primtiveTypesAreIdentical.types @@ -67,7 +67,7 @@ function foo5(x: any) { } enum E { A } >E : E ->A : E +>A : E.A function foo6(x: E); >foo6 : { (x: E): any; (x: E): any; } diff --git a/tests/baselines/reference/reachabilityChecks1.types b/tests/baselines/reference/reachabilityChecks1.types index 1f74c302c647f..6d054748ab933 100644 --- a/tests/baselines/reference/reachabilityChecks1.types +++ b/tests/baselines/reference/reachabilityChecks1.types @@ -61,7 +61,7 @@ module A4 { module A { const enum E { X } >E : E ->X : E +>X : E.X } } @@ -112,7 +112,7 @@ function f3() { >E : E X = 1 ->X : E +>X : E.X >1 : 1 } } @@ -131,7 +131,7 @@ function f4() { >E : E X = 1 ->X : E +>X : E.X >1 : 1 } } diff --git a/tests/baselines/reference/reachabilityChecks2.types b/tests/baselines/reference/reachabilityChecks2.types index 6268ca5012e98..351f2c27adc15 100644 --- a/tests/baselines/reference/reachabilityChecks2.types +++ b/tests/baselines/reference/reachabilityChecks2.types @@ -4,7 +4,7 @@ while (true) { } const enum E { X } >E : E ->X : E +>X : E.X module A4 { >A4 : typeof A4 @@ -15,7 +15,7 @@ module A4 { module A { const enum E { X } >E : E ->X : E +>X : E.X } } diff --git a/tests/baselines/reference/strictModeEnumMemberNameReserved.types b/tests/baselines/reference/strictModeEnumMemberNameReserved.types index 557dfcccc675f..ed19db7b4bc70 100644 --- a/tests/baselines/reference/strictModeEnumMemberNameReserved.types +++ b/tests/baselines/reference/strictModeEnumMemberNameReserved.types @@ -6,7 +6,7 @@ enum E { >E : E static ->static : E +>static : E.static } const x1: E.static = E.static; diff --git a/tests/baselines/reference/stringLiteralTypeIsSubtypeOfString.types b/tests/baselines/reference/stringLiteralTypeIsSubtypeOfString.types index d95dc85657592..be2231fdfb380 100644 --- a/tests/baselines/reference/stringLiteralTypeIsSubtypeOfString.types +++ b/tests/baselines/reference/stringLiteralTypeIsSubtypeOfString.types @@ -279,7 +279,7 @@ function f13(x: any) { } enum E { A } >E : E ->A : E +>A : E.A function f14(x: 'a'); >f14 : { (x: "a"): any; (x: E): any; } diff --git a/tests/baselines/reference/subtypesOfAny.types b/tests/baselines/reference/subtypesOfAny.types index cdb9469b6a4d2..903997a7bbc30 100644 --- a/tests/baselines/reference/subtypesOfAny.types +++ b/tests/baselines/reference/subtypesOfAny.types @@ -129,7 +129,7 @@ interface I13 { enum E { A } >E : E ->A : E +>A : E.A interface I14 { [x: string]: any; diff --git a/tests/baselines/reference/subtypesOfTypeParameter.types b/tests/baselines/reference/subtypesOfTypeParameter.types index 590f827d2b3c7..02d4d527786b0 100644 --- a/tests/baselines/reference/subtypesOfTypeParameter.types +++ b/tests/baselines/reference/subtypesOfTypeParameter.types @@ -49,7 +49,7 @@ class C2 { foo: T; } enum E { A } >E : E ->A : E +>A : E.A function f() { } >f : typeof f diff --git a/tests/baselines/reference/subtypesOfTypeParameterWithConstraints2.types b/tests/baselines/reference/subtypesOfTypeParameterWithConstraints2.types index 270840b06a978..daf700b06f293 100644 --- a/tests/baselines/reference/subtypesOfTypeParameterWithConstraints2.types +++ b/tests/baselines/reference/subtypesOfTypeParameterWithConstraints2.types @@ -142,7 +142,7 @@ class C2 { foo: T; } enum E { A } >E : E ->A : E +>A : E.A function f() { } >f : typeof f diff --git a/tests/baselines/reference/systemModuleAmbientDeclarations.types b/tests/baselines/reference/systemModuleAmbientDeclarations.types index 83a1bb857c7e0..9fcea7b874eec 100644 --- a/tests/baselines/reference/systemModuleAmbientDeclarations.types +++ b/tests/baselines/reference/systemModuleAmbientDeclarations.types @@ -10,7 +10,7 @@ declare class C {} declare enum E {X = 1}; >E : E ->X : E +>X : E.X >1 : 1 export var promise = Promise; @@ -44,7 +44,7 @@ export declare var v: number; === tests/cases/compiler/file5.ts === export declare enum E {X = 1} >E : E ->X : E +>X : E.X >1 : 1 === tests/cases/compiler/file6.ts === diff --git a/tests/baselines/reference/systemModuleConstEnums.types b/tests/baselines/reference/systemModuleConstEnums.types index cbfb339c3e3f0..9c214416018fe 100644 --- a/tests/baselines/reference/systemModuleConstEnums.types +++ b/tests/baselines/reference/systemModuleConstEnums.types @@ -5,7 +5,7 @@ declare function use(a: any); const enum TopLevelConstEnum { X } >TopLevelConstEnum : TopLevelConstEnum ->X : TopLevelConstEnum +>X : TopLevelConstEnum.X export function foo() { >foo : () => void @@ -30,5 +30,5 @@ export function foo() { module M { export const enum NonTopLevelConstEnum { X } >NonTopLevelConstEnum : NonTopLevelConstEnum ->X : NonTopLevelConstEnum +>X : NonTopLevelConstEnum.X } diff --git a/tests/baselines/reference/systemModuleConstEnumsSeparateCompilation.types b/tests/baselines/reference/systemModuleConstEnumsSeparateCompilation.types index 55c37d31a80f4..8b62ffe063f25 100644 --- a/tests/baselines/reference/systemModuleConstEnumsSeparateCompilation.types +++ b/tests/baselines/reference/systemModuleConstEnumsSeparateCompilation.types @@ -5,7 +5,7 @@ declare function use(a: any); const enum TopLevelConstEnum { X } >TopLevelConstEnum : TopLevelConstEnum ->X : TopLevelConstEnum +>X : TopLevelConstEnum.X export function foo() { >foo : () => void @@ -30,5 +30,5 @@ export function foo() { module M { export const enum NonTopLevelConstEnum { X } >NonTopLevelConstEnum : NonTopLevelConstEnum ->X : NonTopLevelConstEnum +>X : NonTopLevelConstEnum.X } diff --git a/tests/baselines/reference/systemModuleNonTopLevelModuleMembers.types b/tests/baselines/reference/systemModuleNonTopLevelModuleMembers.types index 61edb6db4b002..b96402770fd96 100644 --- a/tests/baselines/reference/systemModuleNonTopLevelModuleMembers.types +++ b/tests/baselines/reference/systemModuleNonTopLevelModuleMembers.types @@ -11,7 +11,7 @@ export function TopLevelFunction(): void {} export enum TopLevelEnum {E} >TopLevelEnum : TopLevelEnum ->E : TopLevelEnum +>E : TopLevelEnum.E export module TopLevelModule2 { >TopLevelModule2 : typeof TopLevelModule2 @@ -28,5 +28,5 @@ export module TopLevelModule2 { export enum NonTopLevelEnum {E} >NonTopLevelEnum : NonTopLevelEnum ->E : NonTopLevelEnum +>E : NonTopLevelEnum.E } diff --git a/tests/baselines/reference/tsxDefaultImports.types b/tests/baselines/reference/tsxDefaultImports.types index 08c00256e0ef8..a798e88fd895e 100644 --- a/tests/baselines/reference/tsxDefaultImports.types +++ b/tests/baselines/reference/tsxDefaultImports.types @@ -3,7 +3,7 @@ enum SomeEnum { >SomeEnum : SomeEnum one, ->one : SomeEnum +>one : SomeEnum.one } export default class SomeClass { >SomeClass : SomeClass diff --git a/tests/baselines/reference/typeAliases.types b/tests/baselines/reference/typeAliases.types index 06dc8d4f3274a..8790c043adffa 100644 --- a/tests/baselines/reference/typeAliases.types +++ b/tests/baselines/reference/typeAliases.types @@ -161,7 +161,7 @@ type Meters = number enum E { x = 10 } >E : E ->x : E +>x : E.x >10 : 10 declare function f15(a: string): boolean; diff --git a/tests/baselines/reference/typeArgumentInferenceWithObjectLiteral.types b/tests/baselines/reference/typeArgumentInferenceWithObjectLiteral.types index cb032dc00214e..380e1eb686b18 100644 --- a/tests/baselines/reference/typeArgumentInferenceWithObjectLiteral.types +++ b/tests/baselines/reference/typeArgumentInferenceWithObjectLiteral.types @@ -57,11 +57,11 @@ foo({ enum E1 { X } >E1 : E1 ->X : E1 +>X : E1.X enum E2 { X } >E2 : E2 ->X : E2 +>X : E2.X // Check that we infer from both a.r and b before fixing T in a.w @@ -129,10 +129,10 @@ var v2 = f1({ w: x => x, r: () => E1.X }, E1.X); >v2 : E1 >f1({ w: x => x, r: () => E1.X }, E1.X) : E1 >f1 : (a: { w: (x: T) => U; r: () => T; }, b: T) => U ->{ w: x => x, r: () => E1.X } : { w: (x: E1) => E1; r: () => E1; } ->w : (x: E1) => E1 ->x => x : (x: E1) => E1 ->x : E1 +>{ w: x => x, r: () => E1.X } : { w: (x: E1.X) => E1; r: () => E1; } +>w : (x: E1.X) => E1 +>x => x : (x: E1.X) => E1 +>x : E1.X >x : E1 >r : () => E1 >() => E1.X : () => E1 diff --git a/tests/baselines/reference/typeofANonExportedType.types b/tests/baselines/reference/typeofANonExportedType.types index 6a924e6a11d12..2d4afac5e6921 100644 --- a/tests/baselines/reference/typeofANonExportedType.types +++ b/tests/baselines/reference/typeofANonExportedType.types @@ -101,7 +101,7 @@ enum E { >E : E A ->A : E +>A : E.A } export var r10: typeof E; >r10 : typeof E diff --git a/tests/baselines/reference/typeofAnExportedType.types b/tests/baselines/reference/typeofAnExportedType.types index 21817a0a57350..afd2b737c2f4e 100644 --- a/tests/baselines/reference/typeofAnExportedType.types +++ b/tests/baselines/reference/typeofAnExportedType.types @@ -101,7 +101,7 @@ export enum E { >E : E A ->A : E +>A : E.A } export var r10: typeof E; >r10 : typeof E diff --git a/tests/baselines/reference/undefinedAssignableToEveryType.types b/tests/baselines/reference/undefinedAssignableToEveryType.types index 005f2451f2a39..6456ed7c85938 100644 --- a/tests/baselines/reference/undefinedAssignableToEveryType.types +++ b/tests/baselines/reference/undefinedAssignableToEveryType.types @@ -17,7 +17,7 @@ var ai: I; enum E { A } >E : E ->A : E +>A : E.A var ae: E; >ae : E diff --git a/tests/baselines/reference/undefinedIsSubtypeOfEverything.types b/tests/baselines/reference/undefinedIsSubtypeOfEverything.types index 31d92c98ccfa4..90fd53243431b 100644 --- a/tests/baselines/reference/undefinedIsSubtypeOfEverything.types +++ b/tests/baselines/reference/undefinedIsSubtypeOfEverything.types @@ -143,7 +143,7 @@ class D10 extends Base { enum E { A } >E : E ->A : E +>A : E.A class D11 extends Base { >D11 : D11 diff --git a/tests/baselines/reference/unionSubtypeIfEveryConstituentTypeIsSubtype.types b/tests/baselines/reference/unionSubtypeIfEveryConstituentTypeIsSubtype.types index 53414d53df200..91298487cdb9a 100644 --- a/tests/baselines/reference/unionSubtypeIfEveryConstituentTypeIsSubtype.types +++ b/tests/baselines/reference/unionSubtypeIfEveryConstituentTypeIsSubtype.types @@ -175,7 +175,7 @@ interface I13 { enum E2 { A } >E2 : E2 ->A : E2 +>A : E2.A interface I14 { [x: string]: E2; diff --git a/tests/baselines/reference/validNullAssignments.types b/tests/baselines/reference/validNullAssignments.types index 98b83a63e1b64..5c27f32026111 100644 --- a/tests/baselines/reference/validNullAssignments.types +++ b/tests/baselines/reference/validNullAssignments.types @@ -27,7 +27,7 @@ e = null; // ok enum E { A } >E : E ->A : E +>A : E.A E.A = null; // error >E.A = null : null diff --git a/tests/baselines/reference/validNumberAssignments.types b/tests/baselines/reference/validNumberAssignments.types index 5f6304eb1cd8e..fa9df93717a3d 100644 --- a/tests/baselines/reference/validNumberAssignments.types +++ b/tests/baselines/reference/validNumberAssignments.types @@ -17,7 +17,7 @@ var c: number = x; enum E { A }; >E : E ->A : E +>A : E.A var d: E = x; >d : E diff --git a/tests/cases/compiler/ambientConstLiterals.ts b/tests/cases/compiler/ambientConstLiterals.ts index 040b739bf9345..d42b8524998fd 100644 --- a/tests/cases/compiler/ambientConstLiterals.ts +++ b/tests/cases/compiler/ambientConstLiterals.ts @@ -4,7 +4,7 @@ function f(x: T): T { return x; } -enum E { A, B, C } +enum E { A, B, C, "non identifier" } const c1 = "abc"; const c2 = 123; @@ -14,6 +14,7 @@ const c5 = f(123); const c6 = f(-123); const c7 = true; const c8 = E.A; +const c8b = E["non identifier"]; const c9 = { x: "abc" }; const c10 = [123]; const c11 = "abc" + "def"; diff --git a/tests/cases/compiler/declarationEmitEnumReadonlyProperty.ts b/tests/cases/compiler/declarationEmitEnumReadonlyProperty.ts new file mode 100644 index 0000000000000..fc74d6cab4dca --- /dev/null +++ b/tests/cases/compiler/declarationEmitEnumReadonlyProperty.ts @@ -0,0 +1,11 @@ +// @declaration: true +enum E { + A = 'a', + B = 'b' +} + +class C { + readonly type = E.A; +} + +let x: E.A = new C().type; \ No newline at end of file diff --git a/tests/cases/compiler/enumLiteralUnionNotWidened.ts b/tests/cases/compiler/enumLiteralUnionNotWidened.ts new file mode 100644 index 0000000000000..407d29b292242 --- /dev/null +++ b/tests/cases/compiler/enumLiteralUnionNotWidened.ts @@ -0,0 +1,20 @@ +// repro from #22093 +enum A { one = "one", two = "two" }; +enum B { foo = "foo", bar = "bar" }; + +type C = A | B.foo; +type D = A | "foo"; + +class List +{ + private readonly items: T[] = []; +} + +function asList(arg: T): List { return new List(); } + +// TypeScript incorrectly infers the return type of "asList(x)" to be "List" +// The correct type is "List" +function fn1(x: C): List { return asList(x); } + +// If we use the literal "foo" instead of B.foo, the correct type is inferred +function fn2(x: D): List { return asList(x); } \ No newline at end of file