diff --git a/packages/react-router/src/fileRoute.ts b/packages/react-router/src/fileRoute.ts index ad064fa1eb1..3dbce684fa1 100644 --- a/packages/react-router/src/fileRoute.ts +++ b/packages/react-router/src/fileRoute.ts @@ -165,11 +165,7 @@ export class FileRoute< TParentRoute, TSearchSchemaUsed >, - TFullSearchSchema extends - RouteConstraints['TFullSearchSchema'] = ResolveFullSearchSchema< - TParentRoute, - TSearchSchema - >, + TFullSearchSchema = ResolveFullSearchSchema, TParams extends RouteConstraints['TParams'] = Expand< Record, string> >, @@ -184,9 +180,7 @@ export class FileRoute< ] extends [never] ? RouteContext : TRouteContextReturn, - TAllContext extends Expand< - Assign, TRouteContext> - > = Expand< + TAllContext = Expand< Assign, TRouteContext> >, TRouterContext extends RouteConstraints['TRouterContext'] = AnyContext, diff --git a/packages/react-router/src/route.ts b/packages/react-router/src/route.ts index cce35334685..78fbabfa7ab 100644 --- a/packages/react-router/src/route.ts +++ b/packages/react-router/src/route.ts @@ -61,13 +61,13 @@ export type RouteOptions< TSearchSchema extends Record = {}, TSearchSchemaUsed extends Record = {}, TFullSearchSchemaInput extends Record = TSearchSchemaUsed, - TFullSearchSchema extends Record = TSearchSchema, + TFullSearchSchema = TSearchSchema, TParams extends AnyPathParams = AnyPathParams, TAllParams extends AnyPathParams = TParams, TRouteContextReturn extends RouteContext = RouteContext, TRouteContext extends RouteContext = RouteContext, TRouterContext extends RouteConstraints['TRouterContext'] = AnyContext, - TAllContext extends Record = AnyContext, + TAllContext = AnyContext, TLoaderDeps extends Record = {}, TLoaderDataReturn = unknown, TLoaderData = [TLoaderDataReturn] extends [never] @@ -107,13 +107,13 @@ export type FileBaseRouteOptions< TPath extends string = string, TSearchSchemaInput extends Record = {}, TSearchSchema extends Record = {}, - TFullSearchSchema extends Record = TSearchSchema, + TFullSearchSchema = TSearchSchema, TParams extends AnyPathParams = {}, TAllParams = ParamsFallback, TRouteContextReturn extends RouteContext = RouteContext, TRouteContext extends RouteContext = RouteContext, TRouterContext extends RouteConstraints['TRouterContext'] = AnyContext, - TAllContext extends Record = AnyContext, + TAllContext = AnyContext, TLoaderDeps extends Record = {}, TLoaderDataReturn = unknown, > = { @@ -173,13 +173,13 @@ export type BaseRouteOptions< TSearchSchema extends Record = {}, TSearchSchemaUsed extends Record = {}, TFullSearchSchemaInput extends Record = TSearchSchemaUsed, - TFullSearchSchema extends Record = TSearchSchema, + TFullSearchSchema = TSearchSchema, TParams extends AnyPathParams = {}, TAllParams = ParamsFallback, TRouteContextReturn extends RouteContext = RouteContext, TRouteContext extends RouteContext = RouteContext, TRouterContext extends RouteConstraints['TRouterContext'] = AnyContext, - TAllContext extends Record = AnyContext, + TAllContext = AnyContext, TLoaderDeps extends Record = {}, TLoaderDataReturn = unknown, > = RoutePathOptions & @@ -202,7 +202,7 @@ export type BaseRouteOptions< } type BeforeLoadFn< - TFullSearchSchema extends Record, + TFullSearchSchema, TParentRoute extends AnyRoute, TAllParams, TRouteContextReturn extends RouteContext, @@ -222,7 +222,7 @@ type BeforeLoadFn< export type UpdatableRouteOptions< TAllParams extends Record, - TFullSearchSchema extends Record, + TFullSearchSchema, TLoaderData, > = { // test?: (args: TAllContext) => void @@ -325,7 +325,7 @@ export type SearchSchemaValidatorFn = ( export type RouteLoaderFn< TAllParams = {}, TLoaderDeps extends Record = {}, - TAllContext extends Record = AnyContext, + TAllContext = AnyContext, TRouteContext extends Record = AnyContext, TLoaderData = unknown, > = ( @@ -334,8 +334,8 @@ export type RouteLoaderFn< export interface LoaderFnContext< TAllParams = {}, - TLoaderDeps extends Record = {}, - TAllContext extends Record = AnyContext, + TLoaderDeps = {}, + TAllContext = AnyContext, TRouteContext extends Record = AnyContext, > { abortController: AbortController @@ -376,20 +376,27 @@ export type InferFullSearchSchemaInput = TRoute extends { ? TFullSearchSchemaInput : {} -export type ResolveFullSearchSchema = Expand< - Assign< - Omit, keyof RootSearchSchema>, - TSearchSchema - > +export type ResolveFullSearchSchema< + TParentRoute extends AnyRoute, + TSearchSchema, +> = Assign< + TParentRoute['isRoot'] extends true + ? TParentRoute['types']['searchSchema'] + : TParentRoute['types']['fullSearchSchema'], + TSearchSchema, + keyof RootSearchSchema > -export type ResolveFullSearchSchemaInput = - Expand< - Assign< - Omit, keyof RootSearchSchema>, - TSearchSchemaUsed - > - > +export type ResolveFullSearchSchemaInput< + TParentRoute extends AnyRoute, + TSearchSchemaUsed, +> = Assign< + TParentRoute['isRoot'] extends true + ? TParentRoute['types']['searchSchemaInput'] + : TParentRoute['types']['fullSearchSchemaInput'], + TSearchSchemaUsed, + keyof RootSearchSchema +> export interface AnyRoute extends Route< @@ -450,12 +457,9 @@ export type RouteConstraints = { export function getRouteApi< TId extends RouteIds, TRoute extends AnyRoute = RouteById, - TFullSearchSchema extends Record< - string, - any - > = TRoute['types']['fullSearchSchema'], + TFullSearchSchema = TRoute['types']['fullSearchSchema'], TAllParams extends AnyPathParams = TRoute['types']['allParams'], - TAllContext extends Record = TRoute['types']['allContext'], + TAllContext = TRoute['types']['allContext'], TLoaderDeps extends Record = TRoute['types']['loaderDeps'], TLoaderData = TRoute['types']['loaderData'], >(id: TId) { @@ -473,12 +477,9 @@ export function getRouteApi< export class RouteApi< TId extends RouteIds, TRoute extends AnyRoute = RouteById, - TFullSearchSchema extends Record< - string, - any - > = TRoute['types']['fullSearchSchema'], + TFullSearchSchema = TRoute['types']['fullSearchSchema'], TAllParams extends AnyPathParams = TRoute['types']['allParams'], - TAllContext extends Record = TRoute['types']['allContext'], + TAllContext = TRoute['types']['allContext'], TLoaderDeps extends Record = TRoute['types']['loaderDeps'], TLoaderData = TRoute['types']['loaderData'], > { @@ -568,11 +569,7 @@ export class Route< string, any > = ResolveFullSearchSchemaInput, - TFullSearchSchema extends - RouteConstraints['TFullSearchSchema'] = ResolveFullSearchSchema< - TParentRoute, - TSearchSchema - >, + TFullSearchSchema = ResolveFullSearchSchema, TParams extends RouteConstraints['TParams'] = Expand< Record, string> >, @@ -586,9 +583,7 @@ export class Route< ] extends [never] ? RouteContext : TRouteContextReturn, - in out TAllContext extends Expand< - Assign, TRouteContext> - > = Expand< + in out TAllContext = Expand< Assign, TRouteContext> >, TRouterContext extends RouteConstraints['TRouterContext'] = AnyContext, @@ -918,11 +913,7 @@ export function createRoute< string, any > = ResolveFullSearchSchemaInput, - TFullSearchSchema extends - RouteConstraints['TFullSearchSchema'] = ResolveFullSearchSchema< - TParentRoute, - TSearchSchema - >, + TFullSearchSchema = ResolveFullSearchSchema, TParams extends RouteConstraints['TParams'] = Expand< Record, string> >, @@ -936,9 +927,7 @@ export function createRoute< ] extends [never] ? RouteContext : TRouteContextReturn, - TAllContext extends Expand< - Assign, TRouteContext> - > = Expand< + TAllContext = Expand< Assign, TRouteContext> >, TRouterContext extends RouteConstraints['TRouterContext'] = AnyContext, @@ -1091,7 +1080,7 @@ export class RootRoute< {}, // TAllParams TRouteContextReturn, // TRouteContextReturn TRouteContext, // TRouteContext - Expand>, // TAllContext + Assign, // TAllContext TRouterContext, // TRouterContext TLoaderDeps, TLoaderDataReturn, @@ -1298,16 +1287,10 @@ export class NotFoundRoute< TParentRoute, TSearchSchemaUsed >, - TFullSearchSchema extends - RouteConstraints['TFullSearchSchema'] = ResolveFullSearchSchema< - TParentRoute, - TSearchSchema - >, + TFullSearchSchema = ResolveFullSearchSchema, TRouteContextReturn extends RouteConstraints['TRouteContext'] = AnyContext, TRouteContext extends RouteConstraints['TRouteContext'] = RouteContext, - TAllContext extends Expand< - Assign, TRouteContext> - > = Expand< + TAllContext = Expand< Assign, TRouteContext> >, TRouterContext extends RouteConstraints['TRouterContext'] = AnyContext, diff --git a/packages/react-router/src/utils.ts b/packages/react-router/src/utils.ts index e15a8805fdd..ff725414e12 100644 --- a/packages/react-router/src/utils.ts +++ b/packages/react-router/src/utils.ts @@ -49,7 +49,13 @@ export type IsUnion = ( ? false : true -export type Assign = Omit & TRight +export type Assign = { + [K in Exclude]: K extends keyof TRight + ? TRight[K] + : K extends keyof TLeft + ? TLeft[K] + : never +} export type Timeout = ReturnType