From 9c929cbd8d42fb683a1563e50db58dc633081b43 Mon Sep 17 00:00:00 2001 From: Ivan Akulov Date: Tue, 19 Aug 2025 02:59:18 +0200 Subject: [PATCH] fix(remove-forward-ref): mark ref as optional in type intersections MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The codemod now generates `type & { ref?: RefType }` instead of `type & { ref: RefType }` to correctly reflect that ref is optional in the transformed components. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .../remove-forward-ref/typescript/props-type-literal.output.js | 2 +- .../typescript/type-arguments-custom-names.output.js | 2 +- .../typescript/type-arguments-type-literals.output.js | 2 +- .../remove-forward-ref/typescript/type-arguments.output.js | 2 +- transforms/remove-forward-ref.ts | 1 + 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/transforms/__testfixtures__/remove-forward-ref/typescript/props-type-literal.output.js b/transforms/__testfixtures__/remove-forward-ref/typescript/props-type-literal.output.js index 56fa6f5..1cf872b 100644 --- a/transforms/__testfixtures__/remove-forward-ref/typescript/props-type-literal.output.js +++ b/transforms/__testfixtures__/remove-forward-ref/typescript/props-type-literal.output.js @@ -3,7 +3,7 @@ const MyComponent = function Component( ref: myRef, ...myProps }: { a: 1 } & { - ref: React.RefObject + ref?: React.RefObject } ) { return null; diff --git a/transforms/__testfixtures__/remove-forward-ref/typescript/type-arguments-custom-names.output.js b/transforms/__testfixtures__/remove-forward-ref/typescript/type-arguments-custom-names.output.js index e868776..2bd796f 100644 --- a/transforms/__testfixtures__/remove-forward-ref/typescript/type-arguments-custom-names.output.js +++ b/transforms/__testfixtures__/remove-forward-ref/typescript/type-arguments-custom-names.output.js @@ -3,7 +3,7 @@ const MyComponent = function Component( ref: myRef, ...myProps }: Props & { - ref: React.RefObject + ref?: React.RefObject } ) { return null; diff --git a/transforms/__testfixtures__/remove-forward-ref/typescript/type-arguments-type-literals.output.js b/transforms/__testfixtures__/remove-forward-ref/typescript/type-arguments-type-literals.output.js index f569dfc..340f09d 100644 --- a/transforms/__testfixtures__/remove-forward-ref/typescript/type-arguments-type-literals.output.js +++ b/transforms/__testfixtures__/remove-forward-ref/typescript/type-arguments-type-literals.output.js @@ -3,7 +3,7 @@ const MyInput = ( ref, ...props }: { a: string } & { - ref: React.RefObject + ref?: React.RefObject } ) => { return null; diff --git a/transforms/__testfixtures__/remove-forward-ref/typescript/type-arguments.output.js b/transforms/__testfixtures__/remove-forward-ref/typescript/type-arguments.output.js index 23e1c16..13fcf70 100644 --- a/transforms/__testfixtures__/remove-forward-ref/typescript/type-arguments.output.js +++ b/transforms/__testfixtures__/remove-forward-ref/typescript/type-arguments.output.js @@ -5,7 +5,7 @@ const MyInput = ( ref, ...props }: Props & { - ref: React.RefObject + ref?: React.RefObject } ) => { return null; diff --git a/transforms/remove-forward-ref.ts b/transforms/remove-forward-ref.ts index da7ad9d..92db46d 100644 --- a/transforms/remove-forward-ref.ts +++ b/transforms/remove-forward-ref.ts @@ -22,6 +22,7 @@ const buildPropsAndRefIntersectionTypeAnnotation = ( j.tsTypeLiteral([ j.tsPropertySignature.from({ key: j.identifier('ref'), + optional: true, typeAnnotation: j.tsTypeAnnotation( j.tsTypeReference.from({ typeName: j.tsQualifiedName(