diff --git a/src/transformation/visitors/class/index.ts b/src/transformation/visitors/class/index.ts index e19e2ccc5..fe831045c 100644 --- a/src/transformation/visitors/class/index.ts +++ b/src/transformation/visitors/class/index.ts @@ -186,6 +186,15 @@ function transformClassLikeDeclaration( lua.createExpressionStatement(createClassPropertyDecoratingExpression(context, member, className)) ); } + } else if (ts.isClassStaticBlockDeclaration(member)) { + if (member.body.statements.length > 0) { + const bodyStatements = context.transformStatements(member.body.statements); + const iif = lua.createFunctionExpression(lua.createBlock(bodyStatements), [ + lua.createIdentifier("self"), + ]); + const iife = lua.createCallExpression(iif, [className]); + result.push(lua.createExpressionStatement(iife, member)); + } } } diff --git a/test/unit/classes/classes.spec.ts b/test/unit/classes/classes.spec.ts index 2e447ab54..a2079d360 100644 --- a/test/unit/classes/classes.spec.ts +++ b/test/unit/classes/classes.spec.ts @@ -799,3 +799,22 @@ test.each(['(this["bar"])', '((((this["bar"]))))'])("methods in parentheses pass export const result = inst.foo(); `.expectToMatchJsResult(); }); + +// https://github.com/TypeScriptToLua/TypeScriptToLua/issues/1447 +test("static initialization block (#1447)", () => { + util.testModule` + class A { + private static staticProperty1 = 3; + public static staticProperty2; + static { + this.staticProperty2 = this.staticProperty1 + 5; + } + public static staticProperty3; + static { + this.staticProperty3 = this.staticProperty1 + this.staticProperty2; + } + } + export const result1 = A.staticProperty2; + export const result2 = A.staticProperty3; + `.expectToMatchJsResult(); +});