Skip to content

Commit 3c4a6a4

Browse files
authored
fix(types): better tuple serialization types (#6616)
1 parent 4b1e80f commit 3c4a6a4

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

.changeset/neat-poets-scream.md

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"remix": patch
3+
"@remix-run/serve": patch
4+
"@remix-run/server-runtime": patch
5+
---
6+
7+
fix(types): better tuple serialization types

packages/remix-server-runtime/serialize.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,16 @@ type Serialize<T> =
2929
T extends NonJsonPrimitive ? never :
3030
T extends { toJSON(): infer U } ? U :
3131
T extends [] ? [] :
32-
T extends [unknown, ...unknown[]] ? SerializeTuple<T> :
32+
T extends [unknown, ...unknown[]] ? PrettyTransform<T, SerializeTuple<T>> :
3333
T extends ReadonlyArray<infer U> ? (U extends NonJsonPrimitive ? null : Serialize<U>)[] :
3434
T extends object ? PrettyTransform<T, SerializeObject<UndefinedToOptional<T>>> :
3535
never
3636
;
3737

3838
/** JSON serialize [tuples](https://www.typescriptlang.org/docs/handbook/2/objects.html#tuple-types) */
39-
type SerializeTuple<T extends [unknown, ...unknown[]]> = {
40-
[k in keyof T]: T[k] extends NonJsonPrimitive ? null : Serialize<T[k]>;
41-
};
39+
type SerializeTuple<T extends unknown[]> = T extends [infer F, ...infer R]
40+
? [Serialize<F>, ...SerializeTuple<R>]
41+
: [];
4242

4343
/** JSON serialize objects (not including arrays) and classes */
4444
type SerializeObject<T extends object> = {

0 commit comments

Comments
 (0)