diff --git a/packages/openapi-typescript/src/lib/ts.ts b/packages/openapi-typescript/src/lib/ts.ts index ec0bf75b2..6c8792567 100644 --- a/packages/openapi-typescript/src/lib/ts.ts +++ b/packages/openapi-typescript/src/lib/ts.ts @@ -265,16 +265,23 @@ export function tsEnumMember( if (!JS_PROPERTY_INDEX_RE.test(name)) { if (Number(name[0]) >= 0) { name = `Value${name}`.replace(".", "_"); // don't forged decimals; + } else if (name[0] === "-") { + name = `ValueMinus${name.slice(1)}`; } name = name.replace(JS_PROPERTY_INDEX_INVALID_CHARS_RE, "_"); } let member; if (typeof value === "number") { - member = ts.factory.createEnumMember( - name, - ts.factory.createNumericLiteral(value), - ); + const literal = + value < 0 + ? ts.factory.createPrefixUnaryExpression( + ts.SyntaxKind.MinusToken, + ts.factory.createNumericLiteral(Math.abs(value)), + ) + : ts.factory.createNumericLiteral(value); + + member = ts.factory.createEnumMember(name, literal); } else { member = ts.factory.createEnumMember( name, diff --git a/packages/openapi-typescript/test/lib/ts.test.ts b/packages/openapi-typescript/test/lib/ts.test.ts index cf6373509..d48654fd1 100644 --- a/packages/openapi-typescript/test/lib/ts.test.ts +++ b/packages/openapi-typescript/test/lib/ts.test.ts @@ -122,11 +122,12 @@ describe("tsEnum", () => { }); test("number members", () => { - expect(astToString(tsEnum(".Error.code.", [100, 101, 102])).trim()) + expect(astToString(tsEnum(".Error.code.", [100, 101, 102, -100])).trim()) .toBe(`enum ErrorCode { Value100 = 100, Value101 = 101, - Value102 = 102 + Value102 = 102, + ValueMinus100 = -100 }`); });