diff --git a/.changeset/neat-poets-scream.md b/.changeset/neat-poets-scream.md new file mode 100644 index 00000000000..282498d5a26 --- /dev/null +++ b/.changeset/neat-poets-scream.md @@ -0,0 +1,7 @@ +--- +"remix": patch +"@remix-run/serve": patch +"@remix-run/server-runtime": patch +--- + +fix(types): better tuple serialization types diff --git a/packages/remix-server-runtime/serialize.ts b/packages/remix-server-runtime/serialize.ts index b9514f87073..a7ecbf1e4fb 100644 --- a/packages/remix-server-runtime/serialize.ts +++ b/packages/remix-server-runtime/serialize.ts @@ -29,16 +29,16 @@ type Serialize = T extends NonJsonPrimitive ? never : T extends { toJSON(): infer U } ? U : T extends [] ? [] : - T extends [unknown, ...unknown[]] ? SerializeTuple : + T extends [unknown, ...unknown[]] ? PrettyTransform> : T extends ReadonlyArray ? (U extends NonJsonPrimitive ? null : Serialize)[] : T extends object ? PrettyTransform>> : never ; /** JSON serialize [tuples](https://www.typescriptlang.org/docs/handbook/2/objects.html#tuple-types) */ -type SerializeTuple = { - [k in keyof T]: T[k] extends NonJsonPrimitive ? null : Serialize; -}; +type SerializeTuple = T extends [infer F, ...infer R] + ? [Serialize, ...SerializeTuple] + : []; /** JSON serialize objects (not including arrays) and classes */ type SerializeObject = {