From 197c225e59bead3b9ec9e1673ac12998aaaeaf78 Mon Sep 17 00:00:00 2001 From: Pedro Cattori Date: Sat, 28 Sep 2024 13:39:21 -0400 Subject: [PATCH] clientLoader.hydrate types requires `as const` like: `clientLoader.hydrate = true as const` --- packages/react-router/lib/types.ts | 46 ++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/packages/react-router/lib/types.ts b/packages/react-router/lib/types.ts index 32b9c76ecb..9e02177063 100644 --- a/packages/react-router/lib/types.ts +++ b/packages/react-router/lib/types.ts @@ -31,11 +31,17 @@ type DataFrom = type ServerDataFrom = Serialize>; type ClientDataFrom = DataFrom; +// prettier-ignore +type IsHydrate = + ClientLoader extends { hydrate: true } ? true : + ClientLoader extends { hydrate: false } ? false : + false + export type CreateLoaderData = _CreateLoaderData< ServerDataFrom, ClientDataFrom, - false, // TODO - IsAny extends true ? false : true + IsHydrate, + T extends { HydrateFallback: () => unknown } ? true : false >; // prettier-ignore @@ -187,7 +193,41 @@ type __tests = [ | { d: string; e: Date; f: () => boolean } > >, - // TODO: tests w/ ClientLoaderHydrate + Expect< + Equal< + CreateLoaderData<{ + loader: () => { a: string; b: Date; c: () => boolean }; + clientLoader: () => { d: string; e: Date; f: () => boolean }; + HydrateFallback: () => unknown; + }>, + | { a: string; b: Date; c: undefined } + | { d: string; e: Date; f: () => boolean } + > + >, + Expect< + Equal< + CreateLoaderData<{ + loader: () => { a: string; b: Date; c: () => boolean }; + clientLoader: (() => { d: string; e: Date; f: () => boolean }) & { + hydrate: true; + }; + }>, + | { a: string; b: Date; c: undefined } + | { d: string; e: Date; f: () => boolean } + > + >, + Expect< + Equal< + CreateLoaderData<{ + loader: () => { a: string; b: Date; c: () => boolean }; + clientLoader: (() => { d: string; e: Date; f: () => boolean }) & { + hydrate: true; + }; + HydrateFallback: () => unknown; + }>, + { d: string; e: Date; f: () => boolean } + > + >, // ActionData Expect, undefined>>,