Skip to content

Commit

Permalink
fix: Fix types (#727)
Browse files Browse the repository at this point in the history
  • Loading branch information
taion committed Jul 31, 2020
1 parent e85faab commit 3a02a83
Showing 1 changed file with 32 additions and 29 deletions.
61 changes: 32 additions & 29 deletions types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ export interface Match extends MatchBase {
/**
* An array of all matched route objects
*/
routes: RouteConfig[];
routes: RouteObject[];
/**
* An object with static router properties.
*/
Expand All @@ -85,7 +85,7 @@ export interface Match extends MatchBase {
}

export interface Resolver {
resolveElements(match: Match): AsyncIterable<React.ReactElement | null>;
resolveElements(match: Match): AsyncIterable<ResolvedElement[]>;
}

export const resolver: Resolver;
Expand Down Expand Up @@ -121,7 +121,7 @@ export class Matcher {
*/
isActive: (
match: Match,
location: Location,
location: LocationDescriptorObject,
options?: IsActiveOptions,
) => boolean;

Expand Down Expand Up @@ -196,10 +196,20 @@ export interface RouteRenderArgs {
data?: any;
}

export type ResolvedElementValue = React.ReactElement | null;
export type ResolvedElement =
| ResolvedElementValue
| ((element: React.ReactElement) => ResolvedElementValue)
| ((groups: Record<string, React.ReactElement>) => ResolvedElementValue);

export interface RouteRenderMethod {
(args: RouteRenderArgs): ResolvedElement | undefined;
}

/**
* Shared properties between JSX Route and the resolved RouteConfig
* Shared properties between JSX and object routes.
*/
interface BaseRouteObject {
export interface RouteObjectBase {
/**
* a string defining the pattern for the route
*/
Expand Down Expand Up @@ -229,36 +239,33 @@ interface BaseRouteObject {
/**
* @throws {HttpError}
* @throws {RedirectException}
* @returns undefined | null | React.ReactElement<any> (typical)
*/
render?: (args: RouteRenderArgs) => undefined | null | React.ReactElement;
// Provide indexer allowing for any properties
[key: string]: any;
}
render?: RouteRenderMethod;

export interface RouteProps extends BaseRouteObject {
children?:
| React.ReactNode
| false
| null
| Array<false | null | React.ReactElement<RouteProps>>
| React.ReactElement<RouteProps>;
// Provide indexer allowing for other properties.
[key: string]: any;
}

/**
* JSX Route
* Plain JavaScript route object, possibly from a resolved JSX route.
*/
export class Route extends React.Component<RouteProps> {}
export interface RouteObject extends RouteObjectBase {
children?: RouteConfig | Record<string, RouteConfig>;
}

export type RouteConfig = RouteObject[];

export interface RouteProps extends RouteObjectBase {
children?: React.ReactNode | Record<string, React.ReactNode>;
}

/**
* e.g. Resolved JSX Route
* JSX Route
*/
export interface RouteObject extends BaseRouteObject {
children?: RouteObject[];
export class Route extends React.Component<RouteProps> {
constructor(options: RouteObject);
}

export type RouteConfig = RouteObject[];

export function hotRouteConfig(routeConfig: RouteConfig): RouteConfig;

export class HttpError {
Expand Down Expand Up @@ -401,14 +408,10 @@ export function createMatchEnhancer(
matcher: Matcher,
): StoreEnhancer<{ found: FoundStoreExtension }>;

type ReactElementOrGroup =
| React.ReactElement
| { [key: string]: ReactElementOrGroup[] };

export type RenderPendingArgs = Match;

export interface RenderReadyArgs extends Match {
elements: ReactElementOrGroup[];
elements: Array<ResolvedElement | Record<string, ResolvedElement[]>>;
}

export interface RenderErrorArgs extends Match {
Expand Down

0 comments on commit 3a02a83

Please sign in to comment.