Inferring Types
It is often useful to wrap functionality of your @trpc/client
or @trpc/react
api within other functions. For this purpose, it's necessary to be able to infer input types, output types, and api paths generated by your @trpc/server
router.
Inference Helpers​
@trpc/server
exports the following helper types to assist with inferring these types from the AppRouter
exported by your @trpc/server
router:
inferProcedureOutput<TProcedure>
inferProcedureInput<TProcedure>
inferSubscriptionOutput<TRouter, TPath>
Example Code​
utils/trpc.tstsx
// trpc-helper.tsimport type { AppRouter } from 'api/src/routers/_app' // Import AppRouter from your main server routerimport type { inferProcedureOutput, inferProcedureInput, inferSubscriptionOutput } from '@trpc/server'/*** Enum containing all api query paths*/export type TQuery = keyof AppRouter['_def']['queries']/*** Enum containing all api mutation paths*/export type TMutation = keyof AppRouter['_def']['mutations']/*** Enum containing all api subscription paths*/export type TSubscription = keyof AppRouter['_def']['subscriptions']/*** This is a helper method to infer the output of a query resolver* @example type HelloOutput = InferQueryOutput<'hello'>*/export type InferQueryOutput<TRouteKey extends TQuery> = inferProcedureOutput<AppRouter['_def']['queries'][TRouteKey]>/*** This is a helper method to infer the input of a query resolver* @example type HelloInput = InferQueryInput<'hello'>*/export type InferQueryInput<TRouteKey extends TQuery> = inferProcedureInput<AppRouter['_def']['queries'][TRouteKey]>/*** This is a helper method to infer the output of a mutation resolver* @example type HelloOutput = InferMutationOutput<'hello'>*/export type InferMutationOutput<TRouteKey extends TMutation> =inferProcedureOutput<AppRouter['_def']['mutations'][TRouteKey]>/*** This is a helper method to infer the input of a mutation resolver* @example type HelloInput = InferMutationInput<'hello'>*/export type InferMutationInput<TRouteKey extends TMutation> =inferProcedureInput<AppRouter['_def']['mutations'][TRouteKey]>/*** This is a helper method to infer the output of a subscription resolver* @example type HelloOutput = InferSubscriptionOutput<'hello'>*/export type InferSubscriptionOutput<TRouteKey extends TSubscription> =inferProcedureOutput<AppRouter['_def']['subscriptions'][TRouteKey]>/*** This is a helper method to infer the asynchronous output of a subscription resolver* @example type HelloAsyncOutput = InferAsyncSubscriptionOutput<'hello'>*/export type InferAsyncSubscriptionOutput<TRouteKey extends TSubscription> =inferSubscriptionOutput<AppRouter, TRouteKey>/*** This is a helper method to infer the input of a subscription resolver* @example type HelloInput = InferSubscriptionInput<'hello'>*/export type InferSubscriptionInput<TRouteKey extends TSubscription> =inferProcedureInput<AppRouter['_def']['subscriptions'][TRouteKey]>
utils/trpc.tstsx
// trpc-helper.tsimport type { AppRouter } from 'api/src/routers/_app' // Import AppRouter from your main server routerimport type { inferProcedureOutput, inferProcedureInput, inferSubscriptionOutput } from '@trpc/server'/*** Enum containing all api query paths*/export type TQuery = keyof AppRouter['_def']['queries']/*** Enum containing all api mutation paths*/export type TMutation = keyof AppRouter['_def']['mutations']/*** Enum containing all api subscription paths*/export type TSubscription = keyof AppRouter['_def']['subscriptions']/*** This is a helper method to infer the output of a query resolver* @example type HelloOutput = InferQueryOutput<'hello'>*/export type InferQueryOutput<TRouteKey extends TQuery> = inferProcedureOutput<AppRouter['_def']['queries'][TRouteKey]>/*** This is a helper method to infer the input of a query resolver* @example type HelloInput = InferQueryInput<'hello'>*/export type InferQueryInput<TRouteKey extends TQuery> = inferProcedureInput<AppRouter['_def']['queries'][TRouteKey]>/*** This is a helper method to infer the output of a mutation resolver* @example type HelloOutput = InferMutationOutput<'hello'>*/export type InferMutationOutput<TRouteKey extends TMutation> =inferProcedureOutput<AppRouter['_def']['mutations'][TRouteKey]>/*** This is a helper method to infer the input of a mutation resolver* @example type HelloInput = InferMutationInput<'hello'>*/export type InferMutationInput<TRouteKey extends TMutation> =inferProcedureInput<AppRouter['_def']['mutations'][TRouteKey]>/*** This is a helper method to infer the output of a subscription resolver* @example type HelloOutput = InferSubscriptionOutput<'hello'>*/export type InferSubscriptionOutput<TRouteKey extends TSubscription> =inferProcedureOutput<AppRouter['_def']['subscriptions'][TRouteKey]>/*** This is a helper method to infer the asynchronous output of a subscription resolver* @example type HelloAsyncOutput = InferAsyncSubscriptionOutput<'hello'>*/export type InferAsyncSubscriptionOutput<TRouteKey extends TSubscription> =inferSubscriptionOutput<AppRouter, TRouteKey>/*** This is a helper method to infer the input of a subscription resolver* @example type HelloInput = InferSubscriptionInput<'hello'>*/export type InferSubscriptionInput<TRouteKey extends TSubscription> =inferProcedureInput<AppRouter['_def']['subscriptions'][TRouteKey]>