diff --git a/crates/swc_ecma_codegen/src/lib.rs b/crates/swc_ecma_codegen/src/lib.rs index e518e0f5580f..249adb031e46 100644 --- a/crates/swc_ecma_codegen/src/lib.rs +++ b/crates/swc_ecma_codegen/src/lib.rs @@ -1606,6 +1606,11 @@ where emit!(dec) } + if n.declare { + keyword!("declare"); + space!(); + } + self.emit_accessibility(n.accessibility)?; if n.is_static { diff --git a/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/input.js b/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/input.js index f3cecce3e75d..bd8b4ccbc30c 100644 --- a/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/input.js +++ b/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/input.js @@ -7,4 +7,5 @@ class MyClass extends Base { readonly #prop6 = "asdf"; public abstract override readonly prop7 = 5; override readonly #prop8 = 5; + declare public static readonly prop9: string; } diff --git a/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/output.js b/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/output.js index f3cecce3e75d..bd8b4ccbc30c 100644 --- a/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/output.js +++ b/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/output.js @@ -7,4 +7,5 @@ class MyClass extends Base { readonly #prop6 = "asdf"; public abstract override readonly prop7 = 5; override readonly #prop8 = 5; + declare public static readonly prop9: string; } diff --git a/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/output.min.js b/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/output.min.js index d158b1eb9b56..0bed982a8c8f 100644 --- a/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/output.min.js +++ b/crates/swc_ecma_codegen/tests/fixture/typescript/class_prop/output.min.js @@ -1 +1 @@ -class MyClass extends Base{prop1?: string;prop2!: string;#prop3?: string;#prop4?: string="test";static readonly prop5!: string;readonly #prop6="asdf";public abstract override readonly prop7=5;override readonly #prop8=5} +class MyClass extends Base{prop1?: string;prop2!: string;#prop3?: string;#prop4?: string="test";static readonly prop5!: string;readonly #prop6="asdf";public abstract override readonly prop7=5;override readonly #prop8=5;declare public static readonly prop9: string} diff --git a/crates/swc_ecma_transforms_typescript/src/strip_type.rs b/crates/swc_ecma_transforms_typescript/src/strip_type.rs index 179e63609c70..a12a89174429 100644 --- a/crates/swc_ecma_transforms_typescript/src/strip_type.rs +++ b/crates/swc_ecma_transforms_typescript/src/strip_type.rs @@ -143,6 +143,7 @@ impl VisitMut for StripType { } fn visit_mut_class_prop(&mut self, prop: &mut ClassProp) { + prop.declare = false; prop.readonly = false; prop.is_override = false; prop.is_optional = false;