diff --git a/compiler/packages/babel-plugin-react-compiler/src/HIR/BuildHIR.ts b/compiler/packages/babel-plugin-react-compiler/src/HIR/BuildHIR.ts
index d0335fb3a43..cd7d6a7a35b 100644
--- a/compiler/packages/babel-plugin-react-compiler/src/HIR/BuildHIR.ts
+++ b/compiler/packages/babel-plugin-react-compiler/src/HIR/BuildHIR.ts
@@ -3001,6 +3001,8 @@ function isReorderableExpression(
}
}
}
+ case 'TSAsExpression':
+ case 'TSNonNullExpression':
case 'TypeCastExpression': {
return isReorderableExpression(
builder,
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/ts-as-expression-default-value.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/ts-as-expression-default-value.expect.md
new file mode 100644
index 00000000000..505224cf9ed
--- /dev/null
+++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/ts-as-expression-default-value.expect.md
@@ -0,0 +1,67 @@
+
+## Input
+
+```javascript
+type Status = 'pending' | 'success' | 'error';
+
+const StatusIndicator = ({status}: {status: Status}) => {
+ return
Status: {status}
;
+};
+
+const Component = ({status = 'pending' as Status}) => {
+ return ;
+};
+
+export const FIXTURE_ENTRYPOINT = {
+ fn: Component,
+ params: [{status: 'success'}],
+};
+
+```
+
+## Code
+
+```javascript
+import { c as _c } from "react/compiler-runtime";
+type Status = "pending" | "success" | "error";
+
+const StatusIndicator = (t0) => {
+ const $ = _c(3);
+ const { status } = t0;
+ const t1 = `status-${status}`;
+ let t2;
+ if ($[0] !== status || $[1] !== t1) {
+ t2 = Status: {status}
;
+ $[0] = status;
+ $[1] = t1;
+ $[2] = t2;
+ } else {
+ t2 = $[2];
+ }
+ return t2;
+};
+
+const Component = (t0) => {
+ const $ = _c(2);
+ const { status: t1 } = t0;
+ const status = t1 === undefined ? ("pending" as Status) : t1;
+ let t2;
+ if ($[0] !== status) {
+ t2 = ;
+ $[0] = status;
+ $[1] = t2;
+ } else {
+ t2 = $[1];
+ }
+ return t2;
+};
+
+export const FIXTURE_ENTRYPOINT = {
+ fn: Component,
+ params: [{ status: "success" }],
+};
+
+```
+
+### Eval output
+(kind: ok) Status: success
\ No newline at end of file
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/ts-as-expression-default-value.tsx b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/ts-as-expression-default-value.tsx
new file mode 100644
index 00000000000..715efd5bdc8
--- /dev/null
+++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/ts-as-expression-default-value.tsx
@@ -0,0 +1,14 @@
+type Status = 'pending' | 'success' | 'error';
+
+const StatusIndicator = ({status}: {status: Status}) => {
+ return Status: {status}
;
+};
+
+const Component = ({status = 'pending' as Status}) => {
+ return ;
+};
+
+export const FIXTURE_ENTRYPOINT = {
+ fn: Component,
+ params: [{status: 'success'}],
+};
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/ts-non-null-expression-default-value.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/ts-non-null-expression-default-value.expect.md
new file mode 100644
index 00000000000..7af6bc996a9
--- /dev/null
+++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/ts-non-null-expression-default-value.expect.md
@@ -0,0 +1,54 @@
+
+## Input
+
+```javascript
+const THEME_MAP: ReadonlyMap = new Map([
+ ['default', 'light'],
+ ['dark', 'dark'],
+]);
+
+export const Component = ({theme = THEME_MAP.get('default')!}) => {
+ return User preferences
;
+};
+
+export const FIXTURE_ENTRYPOINT = {
+ fn: Component,
+ params: [{status: 'success'}],
+};
+
+```
+
+## Code
+
+```javascript
+import { c as _c } from "react/compiler-runtime";
+const THEME_MAP: ReadonlyMap = new Map([
+ ["default", "light"],
+ ["dark", "dark"],
+]);
+
+export const Component = (t0) => {
+ const $ = _c(2);
+ const { theme: t1 } = t0;
+ const theme = t1 === undefined ? THEME_MAP.get("default") : t1;
+ const t2 = `theme-${theme}`;
+ let t3;
+ if ($[0] !== t2) {
+ t3 = User preferences
;
+ $[0] = t2;
+ $[1] = t3;
+ } else {
+ t3 = $[1];
+ }
+ return t3;
+};
+
+export const FIXTURE_ENTRYPOINT = {
+ fn: Component,
+ params: [{ status: "success" }],
+};
+
+```
+
+### Eval output
+(kind: ok) User preferences
\ No newline at end of file
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/ts-non-null-expression-default-value.tsx b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/ts-non-null-expression-default-value.tsx
new file mode 100644
index 00000000000..c1d835d6f0f
--- /dev/null
+++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/ts-non-null-expression-default-value.tsx
@@ -0,0 +1,13 @@
+const THEME_MAP: ReadonlyMap = new Map([
+ ['default', 'light'],
+ ['dark', 'dark'],
+]);
+
+export const Component = ({theme = THEME_MAP.get('default')!}) => {
+ return User preferences
;
+};
+
+export const FIXTURE_ENTRYPOINT = {
+ fn: Component,
+ params: [{status: 'success'}],
+};