diff --git a/crates/swc_ecma_codegen/src/typescript.rs b/crates/swc_ecma_codegen/src/typescript.rs
index 9ed7bf4f3b5e..d9f510c6118a 100644
--- a/crates/swc_ecma_codegen/src/typescript.rs
+++ b/crates/swc_ecma_codegen/src/typescript.rs
@@ -505,7 +505,7 @@ where
}
TruePlusMinus::Plus => {
punct!("+");
- punct!("/");
+ punct!("?");
}
TruePlusMinus::Minus => {
punct!("-");
diff --git a/crates/swc_ecma_codegen/tests/fixture/issues/6616/input.ts b/crates/swc_ecma_codegen/tests/fixture/issues/6616/input.ts
new file mode 100644
index 000000000000..b79078e4d293
--- /dev/null
+++ b/crates/swc_ecma_codegen/tests/fixture/issues/6616/input.ts
@@ -0,0 +1,3 @@
+type Custom = {
+ -readonly [P in keyof A]+?: A[P];
+};
diff --git a/crates/swc_ecma_codegen/tests/fixture/issues/6616/output.ts b/crates/swc_ecma_codegen/tests/fixture/issues/6616/output.ts
new file mode 100644
index 000000000000..b79078e4d293
--- /dev/null
+++ b/crates/swc_ecma_codegen/tests/fixture/issues/6616/output.ts
@@ -0,0 +1,3 @@
+type Custom = {
+ -readonly [P in keyof A]+?: A[P];
+};