diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d627a55ce8b5b..f46014506bd85 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5393,7 +5393,7 @@ namespace ts { } function createPropertyNameNodeForIdentifierOrLiteral(name: string, singleQuote?: boolean) { - return isIdentifierText(name, compilerOptions.target) ? createIdentifier(name) : createLiteral(isNumericLiteralName(name) ? +name : name, !!singleQuote); + return isIdentifierText(name, compilerOptions.target) ? createIdentifier(name) : createLiteral(isNumericLiteralName(name) && +name >= 0 ? +name : name, !!singleQuote); } function cloneNodeBuilderContext(context: NodeBuilderContext): NodeBuilderContext { diff --git a/tests/baselines/reference/enumKeysQuotedAsObjectPropertiesInDeclarationEmit.js b/tests/baselines/reference/enumKeysQuotedAsObjectPropertiesInDeclarationEmit.js new file mode 100644 index 0000000000000..c3a36c0ba7180 --- /dev/null +++ b/tests/baselines/reference/enumKeysQuotedAsObjectPropertiesInDeclarationEmit.js @@ -0,0 +1,59 @@ +//// [enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts] +export enum MouseButton { + LEFT_BUTTON = 1, + RIGHT_BUTTON = 2, + MIDDLE_BUTTON = 4, + XBUTTON1_BUTTON = 5, + XBUTTON2_BUTTON = 6, + NO_BUTTON = 0, +} + +export const DOMMouseButton = { + '-1': MouseButton.NO_BUTTON, + "0": MouseButton.LEFT_BUTTON, + "1": MouseButton.MIDDLE_BUTTON, + "2": MouseButton.RIGHT_BUTTON, + "3": MouseButton.XBUTTON1_BUTTON, + "4": MouseButton.XBUTTON2_BUTTON, +}; + +//// [enumKeysQuotedAsObjectPropertiesInDeclarationEmit.js] +"use strict"; +exports.__esModule = true; +exports.DOMMouseButton = exports.MouseButton = void 0; +var MouseButton; +(function (MouseButton) { + MouseButton[MouseButton["LEFT_BUTTON"] = 1] = "LEFT_BUTTON"; + MouseButton[MouseButton["RIGHT_BUTTON"] = 2] = "RIGHT_BUTTON"; + MouseButton[MouseButton["MIDDLE_BUTTON"] = 4] = "MIDDLE_BUTTON"; + MouseButton[MouseButton["XBUTTON1_BUTTON"] = 5] = "XBUTTON1_BUTTON"; + MouseButton[MouseButton["XBUTTON2_BUTTON"] = 6] = "XBUTTON2_BUTTON"; + MouseButton[MouseButton["NO_BUTTON"] = 0] = "NO_BUTTON"; +})(MouseButton = exports.MouseButton || (exports.MouseButton = {})); +exports.DOMMouseButton = { + '-1': MouseButton.NO_BUTTON, + "0": MouseButton.LEFT_BUTTON, + "1": MouseButton.MIDDLE_BUTTON, + "2": MouseButton.RIGHT_BUTTON, + "3": MouseButton.XBUTTON1_BUTTON, + "4": MouseButton.XBUTTON2_BUTTON +}; + + +//// [enumKeysQuotedAsObjectPropertiesInDeclarationEmit.d.ts] +export declare enum MouseButton { + LEFT_BUTTON = 1, + RIGHT_BUTTON = 2, + MIDDLE_BUTTON = 4, + XBUTTON1_BUTTON = 5, + XBUTTON2_BUTTON = 6, + NO_BUTTON = 0 +} +export declare const DOMMouseButton: { + '-1': MouseButton; + 0: MouseButton; + 1: MouseButton; + 2: MouseButton; + 3: MouseButton; + 4: MouseButton; +}; diff --git a/tests/baselines/reference/enumKeysQuotedAsObjectPropertiesInDeclarationEmit.symbols b/tests/baselines/reference/enumKeysQuotedAsObjectPropertiesInDeclarationEmit.symbols new file mode 100644 index 0000000000000..51313bcdd3e9e --- /dev/null +++ b/tests/baselines/reference/enumKeysQuotedAsObjectPropertiesInDeclarationEmit.symbols @@ -0,0 +1,63 @@ +=== tests/cases/compiler/enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts === +export enum MouseButton { +>MouseButton : Symbol(MouseButton, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 0, 0)) + + LEFT_BUTTON = 1, +>LEFT_BUTTON : Symbol(MouseButton.LEFT_BUTTON, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 0, 25)) + + RIGHT_BUTTON = 2, +>RIGHT_BUTTON : Symbol(MouseButton.RIGHT_BUTTON, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 1, 17)) + + MIDDLE_BUTTON = 4, +>MIDDLE_BUTTON : Symbol(MouseButton.MIDDLE_BUTTON, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 2, 18)) + + XBUTTON1_BUTTON = 5, +>XBUTTON1_BUTTON : Symbol(MouseButton.XBUTTON1_BUTTON, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 3, 19)) + + XBUTTON2_BUTTON = 6, +>XBUTTON2_BUTTON : Symbol(MouseButton.XBUTTON2_BUTTON, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 4, 21)) + + NO_BUTTON = 0, +>NO_BUTTON : Symbol(MouseButton.NO_BUTTON, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 5, 21)) +} + +export const DOMMouseButton = { +>DOMMouseButton : Symbol(DOMMouseButton, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 9, 12)) + + '-1': MouseButton.NO_BUTTON, +>'-1' : Symbol('-1', Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 9, 31)) +>MouseButton.NO_BUTTON : Symbol(MouseButton.NO_BUTTON, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 5, 21)) +>MouseButton : Symbol(MouseButton, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 0, 0)) +>NO_BUTTON : Symbol(MouseButton.NO_BUTTON, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 5, 21)) + + "0": MouseButton.LEFT_BUTTON, +>"0" : Symbol("0", Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 10, 29)) +>MouseButton.LEFT_BUTTON : Symbol(MouseButton.LEFT_BUTTON, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 0, 25)) +>MouseButton : Symbol(MouseButton, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 0, 0)) +>LEFT_BUTTON : Symbol(MouseButton.LEFT_BUTTON, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 0, 25)) + + "1": MouseButton.MIDDLE_BUTTON, +>"1" : Symbol("1", Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 11, 30)) +>MouseButton.MIDDLE_BUTTON : Symbol(MouseButton.MIDDLE_BUTTON, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 2, 18)) +>MouseButton : Symbol(MouseButton, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 0, 0)) +>MIDDLE_BUTTON : Symbol(MouseButton.MIDDLE_BUTTON, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 2, 18)) + + "2": MouseButton.RIGHT_BUTTON, +>"2" : Symbol("2", Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 12, 32)) +>MouseButton.RIGHT_BUTTON : Symbol(MouseButton.RIGHT_BUTTON, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 1, 17)) +>MouseButton : Symbol(MouseButton, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 0, 0)) +>RIGHT_BUTTON : Symbol(MouseButton.RIGHT_BUTTON, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 1, 17)) + + "3": MouseButton.XBUTTON1_BUTTON, +>"3" : Symbol("3", Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 13, 31)) +>MouseButton.XBUTTON1_BUTTON : Symbol(MouseButton.XBUTTON1_BUTTON, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 3, 19)) +>MouseButton : Symbol(MouseButton, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 0, 0)) +>XBUTTON1_BUTTON : Symbol(MouseButton.XBUTTON1_BUTTON, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 3, 19)) + + "4": MouseButton.XBUTTON2_BUTTON, +>"4" : Symbol("4", Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 14, 34)) +>MouseButton.XBUTTON2_BUTTON : Symbol(MouseButton.XBUTTON2_BUTTON, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 4, 21)) +>MouseButton : Symbol(MouseButton, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 0, 0)) +>XBUTTON2_BUTTON : Symbol(MouseButton.XBUTTON2_BUTTON, Decl(enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts, 4, 21)) + +}; diff --git a/tests/baselines/reference/enumKeysQuotedAsObjectPropertiesInDeclarationEmit.types b/tests/baselines/reference/enumKeysQuotedAsObjectPropertiesInDeclarationEmit.types new file mode 100644 index 0000000000000..955e942460ff5 --- /dev/null +++ b/tests/baselines/reference/enumKeysQuotedAsObjectPropertiesInDeclarationEmit.types @@ -0,0 +1,70 @@ +=== tests/cases/compiler/enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts === +export enum MouseButton { +>MouseButton : MouseButton + + LEFT_BUTTON = 1, +>LEFT_BUTTON : MouseButton.LEFT_BUTTON +>1 : 1 + + RIGHT_BUTTON = 2, +>RIGHT_BUTTON : MouseButton.RIGHT_BUTTON +>2 : 2 + + MIDDLE_BUTTON = 4, +>MIDDLE_BUTTON : MouseButton.MIDDLE_BUTTON +>4 : 4 + + XBUTTON1_BUTTON = 5, +>XBUTTON1_BUTTON : MouseButton.XBUTTON1_BUTTON +>5 : 5 + + XBUTTON2_BUTTON = 6, +>XBUTTON2_BUTTON : MouseButton.XBUTTON2_BUTTON +>6 : 6 + + NO_BUTTON = 0, +>NO_BUTTON : MouseButton.NO_BUTTON +>0 : 0 +} + +export const DOMMouseButton = { +>DOMMouseButton : { '-1': MouseButton; 0: MouseButton; 1: MouseButton; 2: MouseButton; 3: MouseButton; 4: MouseButton; } +>{ '-1': MouseButton.NO_BUTTON, "0": MouseButton.LEFT_BUTTON, "1": MouseButton.MIDDLE_BUTTON, "2": MouseButton.RIGHT_BUTTON, "3": MouseButton.XBUTTON1_BUTTON, "4": MouseButton.XBUTTON2_BUTTON,} : { '-1': MouseButton; 0: MouseButton; 1: MouseButton; 2: MouseButton; 3: MouseButton; 4: MouseButton; } + + '-1': MouseButton.NO_BUTTON, +>'-1' : MouseButton +>MouseButton.NO_BUTTON : MouseButton.NO_BUTTON +>MouseButton : typeof MouseButton +>NO_BUTTON : MouseButton.NO_BUTTON + + "0": MouseButton.LEFT_BUTTON, +>"0" : MouseButton +>MouseButton.LEFT_BUTTON : MouseButton.LEFT_BUTTON +>MouseButton : typeof MouseButton +>LEFT_BUTTON : MouseButton.LEFT_BUTTON + + "1": MouseButton.MIDDLE_BUTTON, +>"1" : MouseButton +>MouseButton.MIDDLE_BUTTON : MouseButton.MIDDLE_BUTTON +>MouseButton : typeof MouseButton +>MIDDLE_BUTTON : MouseButton.MIDDLE_BUTTON + + "2": MouseButton.RIGHT_BUTTON, +>"2" : MouseButton +>MouseButton.RIGHT_BUTTON : MouseButton.RIGHT_BUTTON +>MouseButton : typeof MouseButton +>RIGHT_BUTTON : MouseButton.RIGHT_BUTTON + + "3": MouseButton.XBUTTON1_BUTTON, +>"3" : MouseButton +>MouseButton.XBUTTON1_BUTTON : MouseButton.XBUTTON1_BUTTON +>MouseButton : typeof MouseButton +>XBUTTON1_BUTTON : MouseButton.XBUTTON1_BUTTON + + "4": MouseButton.XBUTTON2_BUTTON, +>"4" : MouseButton +>MouseButton.XBUTTON2_BUTTON : MouseButton.XBUTTON2_BUTTON +>MouseButton : typeof MouseButton +>XBUTTON2_BUTTON : MouseButton.XBUTTON2_BUTTON + +}; diff --git a/tests/baselines/reference/objectTypeWithStringNamedNumericProperty.types b/tests/baselines/reference/objectTypeWithStringNamedNumericProperty.types index df5e6ace60f69..156ad55404338 100644 --- a/tests/baselines/reference/objectTypeWithStringNamedNumericProperty.types +++ b/tests/baselines/reference/objectTypeWithStringNamedNumericProperty.types @@ -278,7 +278,7 @@ var r13 = i[-01] >01 : 1 var a: { ->a : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; -1: Date; } +>a : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; } "0.1": void; >"0.1" : void @@ -308,19 +308,19 @@ var a: { var r1 = a['0.1']; >r1 : void >a['0.1'] : void ->a : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; -1: Date; } +>a : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; } >'0.1' : "0.1" var r2 = a['.1']; >r2 : Object >a['.1'] : Object ->a : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; -1: Date; } +>a : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; } >'.1' : ".1" var r3 = a['1']; >r3 : number >a['1'] : number ->a : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; -1: Date; } +>a : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; } >'1' : "1" var r3 = c[1]; @@ -332,7 +332,7 @@ var r3 = c[1]; var r4 = a['1.']; >r4 : string >a['1.'] : string ->a : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; -1: Date; } +>a : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; } >'1.' : "1." var r3 = c[1.]; // same as indexing by 1 when done numerically @@ -344,13 +344,13 @@ var r3 = c[1.]; // same as indexing by 1 when done numerically var r5 = a['1..']; >r5 : boolean >a['1..'] : boolean ->a : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; -1: Date; } +>a : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; } >'1..' : "1.." var r6 = a['1.0']; >r6 : Date >a['1.0'] : Date ->a : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; -1: Date; } +>a : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": Date; } >'1.0' : "1.0" var r3 = c[1.0]; // same as indexing by 1 when done numerically @@ -413,8 +413,8 @@ var r13 = i[-01] >01 : 1 var b = { ->b : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; -1: DateConstructor; } ->{ "0.1": null, ".1": new Object(), "1": 1, "1.": "", "1..": true, "1.0": new Date(), "-1.0": /123/, "-1": Date} : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; -1: DateConstructor; } +>b : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; } +>{ "0.1": null, ".1": new Object(), "1": 1, "1.": "", "1..": true, "1.0": new Date(), "-1.0": /123/, "-1": Date} : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; } "0.1": null, >"0.1" : void @@ -456,19 +456,19 @@ var b = { var r1 = b['0.1']; >r1 : void >b['0.1'] : void ->b : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; -1: DateConstructor; } +>b : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; } >'0.1' : "0.1" var r2 = b['.1']; >r2 : Object >b['.1'] : Object ->b : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; -1: DateConstructor; } +>b : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; } >'.1' : ".1" var r3 = b['1']; >r3 : number >b['1'] : number ->b : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; -1: DateConstructor; } +>b : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; } >'1' : "1" var r3 = c[1]; @@ -480,7 +480,7 @@ var r3 = c[1]; var r4 = b['1.']; >r4 : string >b['1.'] : string ->b : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; -1: DateConstructor; } +>b : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; } >'1.' : "1." var r3 = c[1.]; // same as indexing by 1 when done numerically @@ -492,13 +492,13 @@ var r3 = c[1.]; // same as indexing by 1 when done numerically var r5 = b['1..']; >r5 : boolean >b['1..'] : boolean ->b : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; -1: DateConstructor; } +>b : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; } >'1..' : "1.." var r6 = b['1.0']; >r6 : Date >b['1.0'] : Date ->b : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; -1: DateConstructor; } +>b : { 0.1: void; ".1": Object; 1: number; "1.": string; "1..": boolean; "1.0": Date; "-1.0": RegExp; "-1": DateConstructor; } >'1.0' : "1.0" var r3 = c[1.0]; // same as indexing by 1 when done numerically diff --git a/tests/cases/compiler/enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts b/tests/cases/compiler/enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts new file mode 100644 index 0000000000000..e05252bb7661b --- /dev/null +++ b/tests/cases/compiler/enumKeysQuotedAsObjectPropertiesInDeclarationEmit.ts @@ -0,0 +1,18 @@ +// @declaration: true +export enum MouseButton { + LEFT_BUTTON = 1, + RIGHT_BUTTON = 2, + MIDDLE_BUTTON = 4, + XBUTTON1_BUTTON = 5, + XBUTTON2_BUTTON = 6, + NO_BUTTON = 0, +} + +export const DOMMouseButton = { + '-1': MouseButton.NO_BUTTON, + "0": MouseButton.LEFT_BUTTON, + "1": MouseButton.MIDDLE_BUTTON, + "2": MouseButton.RIGHT_BUTTON, + "3": MouseButton.XBUTTON1_BUTTON, + "4": MouseButton.XBUTTON2_BUTTON, +}; \ No newline at end of file