Import
import { Join } from "@typed/router";Signatures
export type Join<Routes extends ReadonlyArray<Route<any, any>>> = [
Route<RouteJoinPath<Routes>, Schema.Codec<Simplify<UnionToIntersection<Routes[number]["paramsSchema"]["Type"]>>, Path.Params<RouteJoinPath<Routes>>, Routes[number]["paramsSchema"]["DecodingServices"], Routes[number]["paramsSchema"]["EncodingServices"]>>
] extends [
Route<infer Path, infer Schema>
] ? Route<Path, Schema> : never;export declare const Join: <const Routes extends AnyRoutes>(...routes: Routes) => Join<FlattenRoutes<Routes>>;Ownership and lifetime
TypeScript computes Join from its Route input; the alias is erased and owns no runtime value.
Examples
import * as Router from "@typed/router"
const Workspace = Router.Join(Router.Parse("/workspaces"), Router.Param("workspaceId"))
const Issue = Router.Join(Workspace, Router.Parse("/issues"), Router.Int("issueId"))
type IssueInput = Router.Type<typeof Issue>
// { readonly workspaceId: string; readonly issueId: number }Other public imports
These import paths expose the same declaration. Each page retains its own public name and signature.