From 2b8dae8052d178d573e0f73cfada2b37f7573a9c Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Mon, 27 Nov 2023 23:07:13 +0200 Subject: [PATCH 1/2] fix(56562): wrap negative properties in a prefix unary expression --- src/compiler/checker.ts | 2 +- .../refactorInferFunctionReturnType25.ts | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/refactorInferFunctionReturnType25.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 3a8d1e736f000..3e197651ac20a 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -8331,7 +8331,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { return factory.createStringLiteral(name, !!singleQuote); } if (isNumericLiteralName(name) && startsWith(name, "-")) { - return factory.createComputedPropertyName(factory.createNumericLiteral(+name)); + return factory.createComputedPropertyName(+name < 0 ? factory.createPrefixUnaryExpression(SyntaxKind.MinusToken, factory.createNumericLiteral(-name)) : factory.createNumericLiteral(+name)); } return createPropertyNameNodeForIdentifierOrLiteral(name, getEmitScriptTarget(compilerOptions), singleQuote, stringNamed, isMethod); } diff --git a/tests/cases/fourslash/refactorInferFunctionReturnType25.ts b/tests/cases/fourslash/refactorInferFunctionReturnType25.ts new file mode 100644 index 0000000000000..3666033e400bd --- /dev/null +++ b/tests/cases/fourslash/refactorInferFunctionReturnType25.ts @@ -0,0 +1,20 @@ +/// + +////function /*a*//*b*/f() { +//// return { +//// [-1]: 0 +//// } as const +////} + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Infer function return type", + actionName: "Infer function return type", + actionDescription: "Infer function return type", + newContent: +`function f(): { readonly [-1]: 0; } { + return { + [-1]: 0 + } as const +}` +}); From b283e9a86e52c9e70e99c8a7cd14f6fccaeb32d9 Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Tue, 28 Nov 2023 09:13:13 +0200 Subject: [PATCH 2/2] remove useless condition --- src/compiler/checker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 3e197651ac20a..261d3e47394f0 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -8331,7 +8331,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { return factory.createStringLiteral(name, !!singleQuote); } if (isNumericLiteralName(name) && startsWith(name, "-")) { - return factory.createComputedPropertyName(+name < 0 ? factory.createPrefixUnaryExpression(SyntaxKind.MinusToken, factory.createNumericLiteral(-name)) : factory.createNumericLiteral(+name)); + return factory.createComputedPropertyName(factory.createPrefixUnaryExpression(SyntaxKind.MinusToken, factory.createNumericLiteral(-name))); } return createPropertyNameNodeForIdentifierOrLiteral(name, getEmitScriptTarget(compilerOptions), singleQuote, stringNamed, isMethod); }