Skip to content

Commit 2ba17cb

Browse files
committed
fix: support undefined as optional keys in loader data
1 parent b2ef490 commit 2ba17cb

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

packages/remix-react/__tests__/hook-types-test.tsx

+10
Original file line numberDiff line numberDiff line change
@@ -100,4 +100,14 @@ describe("type serializer", () => {
100100
type response = UseDataFunctionReturn<Loader>;
101101
isEqual<response, { arg: string }>(true);
102102
});
103+
104+
it("makes keys optional if the value is undefined", () => {
105+
type AppData = {
106+
arg1: string;
107+
arg2: number | undefined;
108+
arg3: undefined;
109+
};
110+
type response = UseDataFunctionReturn<AppData>;
111+
isEqual<response, { arg1: string; arg2?: number }>(true);
112+
});
103113
});

packages/remix-react/components.tsx

+14-5
Original file line numberDiff line numberDiff line change
@@ -1336,6 +1336,7 @@ type JsonPrimitives =
13361336
| Boolean
13371337
| null;
13381338
type NonJsonPrimitives = undefined | Function | symbol;
1339+
13391340
type SerializeType<T> = T extends JsonPrimitives
13401341
? T
13411342
: T extends NonJsonPrimitives
@@ -1353,13 +1354,21 @@ type SerializeType<T> = T extends JsonPrimitives
13531354
: T extends (infer U)[]
13541355
? (U extends NonJsonPrimitives ? null : SerializeType<U>)[]
13551356
: T extends object
1356-
? {
1357-
[k in keyof T as T[k] extends NonJsonPrimitives
1358-
? never
1359-
: k]: SerializeType<T[k]>;
1360-
}
1357+
? SerializeObject<UndefinedOptionals<T>>
13611358
: never;
13621359

1360+
type SerializeObject<T> = {
1361+
[k in keyof T as T[k] extends NonJsonPrimitives ? never : k]: SerializeType<
1362+
T[k]
1363+
>;
1364+
};
1365+
1366+
type UndefinedOptionals<T> = {
1367+
[k in keyof T as undefined extends T[k] ? never : k]: NonNullable<T[k]>;
1368+
} & {
1369+
[k in keyof T as undefined extends T[k] ? k : never]?: NonNullable<T[k]>;
1370+
};
1371+
13631372
export type UseDataFunctionReturn<T extends DataOrFunction> = T extends (
13641373
...args: any[]
13651374
) => infer Output

0 commit comments

Comments
 (0)