From 1f54d0a9356d92e6f2fe63d5991c50e7892f3f12 Mon Sep 17 00:00:00 2001 From: "Oleksandr T." Date: Thu, 8 Aug 2024 19:37:57 +0300 Subject: [PATCH] fix(59484): Constructor overload still present in emitted JS (#59491) --- src/compiler/factory/nodeFactory.ts | 13 +++++--- .../reference/constructorOverloads9.js | 19 ++++++++++++ .../reference/constructorOverloads9.symbols | 21 +++++++++++++ .../reference/constructorOverloads9.types | 30 +++++++++++++++++++ tests/cases/compiler/constructorOverloads9.ts | 8 +++++ 5 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 tests/baselines/reference/constructorOverloads9.js create mode 100644 tests/baselines/reference/constructorOverloads9.symbols create mode 100644 tests/baselines/reference/constructorOverloads9.types create mode 100644 tests/cases/compiler/constructorOverloads9.ts diff --git a/src/compiler/factory/nodeFactory.ts b/src/compiler/factory/nodeFactory.ts index 8f3b15690f7..90b9071efe5 100644 --- a/src/compiler/factory/nodeFactory.ts +++ b/src/compiler/factory/nodeFactory.ts @@ -1985,10 +1985,15 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode node.parameters = createNodeArray(parameters); node.body = body; - node.transformFlags = propagateChildrenFlags(node.modifiers) | - propagateChildrenFlags(node.parameters) | - (propagateChildFlags(node.body) & ~TransformFlags.ContainsPossibleTopLevelAwait) | - TransformFlags.ContainsES2015; + if (!node.body) { + node.transformFlags = TransformFlags.ContainsTypeScript; + } + else { + node.transformFlags = propagateChildrenFlags(node.modifiers) | + propagateChildrenFlags(node.parameters) | + (propagateChildFlags(node.body) & ~TransformFlags.ContainsPossibleTopLevelAwait) | + TransformFlags.ContainsES2015; + } node.typeParameters = undefined; // initialized by parser for grammar errors node.type = undefined; // initialized by parser for grammar errors diff --git a/tests/baselines/reference/constructorOverloads9.js b/tests/baselines/reference/constructorOverloads9.js new file mode 100644 index 00000000000..868263711d8 --- /dev/null +++ b/tests/baselines/reference/constructorOverloads9.js @@ -0,0 +1,19 @@ +//// [tests/cases/compiler/constructorOverloads9.ts] //// + +//// [constructorOverloads9.ts] +export class C { + a; + constructor(); + constructor(x = '') { + this.a = x; + } +} + + +//// [constructorOverloads9.js] +export class C { + a; + constructor(x = '') { + this.a = x; + } +} diff --git a/tests/baselines/reference/constructorOverloads9.symbols b/tests/baselines/reference/constructorOverloads9.symbols new file mode 100644 index 00000000000..27527a8d823 --- /dev/null +++ b/tests/baselines/reference/constructorOverloads9.symbols @@ -0,0 +1,21 @@ +//// [tests/cases/compiler/constructorOverloads9.ts] //// + +=== constructorOverloads9.ts === +export class C { +>C : Symbol(C, Decl(constructorOverloads9.ts, 0, 0)) + + a; +>a : Symbol(C.a, Decl(constructorOverloads9.ts, 0, 16)) + + constructor(); + constructor(x = '') { +>x : Symbol(x, Decl(constructorOverloads9.ts, 3, 16)) + + this.a = x; +>this.a : Symbol(C.a, Decl(constructorOverloads9.ts, 0, 16)) +>this : Symbol(C, Decl(constructorOverloads9.ts, 0, 0)) +>a : Symbol(C.a, Decl(constructorOverloads9.ts, 0, 16)) +>x : Symbol(x, Decl(constructorOverloads9.ts, 3, 16)) + } +} + diff --git a/tests/baselines/reference/constructorOverloads9.types b/tests/baselines/reference/constructorOverloads9.types new file mode 100644 index 00000000000..0f5459e0d81 --- /dev/null +++ b/tests/baselines/reference/constructorOverloads9.types @@ -0,0 +1,30 @@ +//// [tests/cases/compiler/constructorOverloads9.ts] //// + +=== constructorOverloads9.ts === +export class C { +>C : C +> : ^ + + a; +>a : any + + constructor(); + constructor(x = '') { +>x : string +> : ^^^^^^ +>'' : "" +> : ^^ + + this.a = x; +>this.a = x : string +> : ^^^^^^ +>this.a : any +>this : this +> : ^^^^ +>a : any +> : ^^^ +>x : string +> : ^^^^^^ + } +} + diff --git a/tests/cases/compiler/constructorOverloads9.ts b/tests/cases/compiler/constructorOverloads9.ts new file mode 100644 index 00000000000..3ac84ad8964 --- /dev/null +++ b/tests/cases/compiler/constructorOverloads9.ts @@ -0,0 +1,8 @@ +// @target: esnext +export class C { + a; + constructor(); + constructor(x = '') { + this.a = x; + } +}