diff --git a/internal/transformers/runtimesyntax.go b/internal/transformers/runtimesyntax.go index 22ffa38e54..07af0118f5 100644 --- a/internal/transformers/runtimesyntax.go +++ b/internal/transformers/runtimesyntax.go @@ -810,7 +810,30 @@ func (tx *RuntimeSyntaxTransformer) visitClassExpression(node *ast.ClassExpressi func (tx *RuntimeSyntaxTransformer) visitConstructorDeclaration(node *ast.ConstructorDeclaration) *ast.Node { modifiers := tx.visitor.VisitModifiers(node.Modifiers()) - parameters := tx.emitContext.VisitParameters(node.ParameterList(), tx.visitor) + var nonParamPropertyParams []*ast.ParameterDeclaration + for _, param := range node.ParameterList().Nodes { + nonParamPropertyParams = append(nonParamPropertyParams, param.AsParameterDeclaration()) + } + var newParams []*ast.Node + for _, param := range nonParamPropertyParams { + var paramModifiers *ast.ModifierList + if ast.IsParameterPropertyDeclaration(param.AsNode(), node.AsNode()) { + paramModifiers = nil + } else { + paramModifiers = param.Modifiers() + } + newParam := tx.factory.NewParameterDeclaration( + paramModifiers, + param.DotDotDotToken, + param.Name().Clone(tx.factory), + param.QuestionToken, + nil, + param.Initializer, + ) + newParams = append(newParams, newParam) + } + parameters := tx.factory.NewNodeList(newParams) + parameters.Loc = node.ParameterList().Loc body := tx.visitConstructorBody(node.Body.AsBlock(), node.AsNode()) return tx.factory.UpdateConstructorDeclaration(node, modifiers, nil /*typeParameters*/, parameters, nil /*returnType*/, body) } @@ -878,7 +901,7 @@ func (tx *RuntimeSyntaxTransformer) visitConstructorBody(body *ast.Block, constr statements = append(statements, tx.transformConstructorBodyWorker(rest, superPath, parameterPropertyAssignments)...) } else { statements = append(statements, parameterPropertyAssignments...) - statements = append(statements, core.FirstResult(tx.visitor.VisitSlice(rest))...) + statements = append(statements, rest...) } statements = tx.emitContext.EndAndMergeVariableEnvironment(statements) diff --git a/internal/transformers/runtimesyntax_test.go b/internal/transformers/runtimesyntax_test.go index 98ea185363..8299db7cae 100644 --- a/internal/transformers/runtimesyntax_test.go +++ b/internal/transformers/runtimesyntax_test.go @@ -431,6 +431,29 @@ func TestParameterPropertyTransformer(t *testing.T) { constructor(x) { this.x = x; } +}`}, + {title: "multiple parameter properties", input: `class Project { + constructor( + public name: string, + public deadline: Date, + public budget: number + ) {} + + extendDeadline(days: number): void { + this.deadline.setDate(this.deadline.getDate() + days); + } +}`, output: `class Project { + name; + deadline; + budget; + constructor(name, deadline, budget) { + this.name = name; + this.deadline = deadline; + this.budget = budget; + } + extendDeadline(days) { + this.deadline.setDate(this.deadline.getDate() + days); + } }`}, }