Repository: swc-project/swc (rust)

Issue:
swc_ecma_codegen emits `/` in some mapped types
### Describe the bug

I'm using swc_ecma_codegen directly to emit a .d.ts file.  It should look like this:
```
declare type Custom<A> = {
    -readonly [P in keyof A]+?: A[P];
}
```
but the actual output was:
```
declare type Custom<A> = {
    -readonly [P in keyof A]+/: A[P];
}
```


### Input code

_No response_

### Config

_No response_

### Playground link

_No response_

### Expected behavior

The following should be output 

### Actual behavior

_No response_

### Version

swc_ecma_codegen = 0.127.16

### Additional context

Updating https://github.com/swc-project/swc/blob/main/crates/swc_ecma_codegen/src/typescript.rs#L508 to output a `?` instead of `/` should fix the issue.  I can work on a PR for this.

Pull request description:
fix(es/codegen): fix issue with typescript's mapped types output
<!-- Note: CI script will automatically rebase your PR so please do not rebase unless required -->

<!-- Thanks for submitting a pull request! Please provide enough information so that others can review your pull request. -->

**Description:**

In some situations the code generated for mapped types would include a `/` instead of a `?`.

**BREAKING CHANGE:**

This is a small bug fix and shouldn't be breaking change.

**Related issue (if exists):**

fixes #6616

Patch:
diff --git a/crates/swc_ecma_codegen/src/typescript.rs b/crates/swc_ecma_codegen/src/typescript.rs
index 9ed7bf4f3b..d9f510c611 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!("-");


Test patch:
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 0000000000..b79078e4d2
--- /dev/null
+++ b/crates/swc_ecma_codegen/tests/fixture/issues/6616/input.ts
@@ -0,0 +1,3 @@
+type Custom<A> = {
+    -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 0000000000..b79078e4d2
--- /dev/null
+++ b/crates/swc_ecma_codegen/tests/fixture/issues/6616/output.ts
@@ -0,0 +1,3 @@
+type Custom<A> = {
+    -readonly [P in keyof A]+?: A[P];
+};