출력 검증
비공식 베타 번역
이 페이지는 PageTurner AI로 번역되었습니다(베타). 프로젝트 공식 승인을 받지 않았습니다. 오류를 발견하셨나요? 문제 신고 →
tRPC는 검증자를 추가하지 않아도 출력에 대한 자동 타입 안전성을 제공합니다. 그러나 민감한 데이터가 유출되는 것을 방지하기 위해 출력 타입을 엄격하게 정의해야 할 때 유용할 수 있습니다.
input:과 유사하게 query() 및 mutation() 라우터 메서드에 output: 검증을 추가할 수 있습니다. 출력 검증자는 resolve() 함수가 반환한 페이로드로 호출됩니다.
output 검증자가 정의되면, 그 추론된 타입이 resolve() 함수의 반환 타입으로 예상됩니다.
정보
- 이는 완전히 선택 사항이며 실수로 민감한 정보를 누출하지 않도록 하려는 경우에만 필요합니다
- 출력 검증이 실패하면 서버는
INTERNAL_SERVER_ERROR로 응답합니다
예시
tRPC는 yup/superstruct/zod/myzod/커스텀 검증자 등과 즉시 함께 작동합니다 - 테스트 모음 보기
Zod와 함께 사용하기
tsximport * as trpc from '@trpc/server';import { z } from 'zod';// [...]export const appRouter = trpc.router<Context>().query('hello', {output: z.object({greeting: z.string(),}),// expects return type of { greeting: string }resolve() {return {greeting: 'hello!',};},});export type AppRouter = typeof appRouter;
tsximport * as trpc from '@trpc/server';import { z } from 'zod';// [...]export const appRouter = trpc.router<Context>().query('hello', {output: z.object({greeting: z.string(),}),// expects return type of { greeting: string }resolve() {return {greeting: 'hello!',};},});export type AppRouter = typeof appRouter;
Yup와 함께 사용하기
tsximport * as trpc from '@trpc/server';import * as yup from 'yup';// [...]export const appRouter = trpc.router<Context>().query('hello', {output: yup.object({greeting: yup.string().required(),}),resolve() {return { greeting: 'hello!' };},});export type AppRouter = typeof appRouter;
tsximport * as trpc from '@trpc/server';import * as yup from 'yup';// [...]export const appRouter = trpc.router<Context>().query('hello', {output: yup.object({greeting: yup.string().required(),}),resolve() {return { greeting: 'hello!' };},});export type AppRouter = typeof appRouter;
Superstruct와 함께 사용하기
tsximport * as trpc from '@trpc/server';import * as t from 'superstruct';// [...]export const appRouter = trpc.router<Context>().query('hello', {input: t.string(),output: t.object({greeting: t.string(),}),resolve({ input }) {return { greeting: input };},});export type AppRouter = typeof appRouter;
tsximport * as trpc from '@trpc/server';import * as t from 'superstruct';// [...]export const appRouter = trpc.router<Context>().query('hello', {input: t.string(),output: t.object({greeting: t.string(),}),resolve({ input }) {return { greeting: input };},});export type AppRouter = typeof appRouter;
커스텀 검증자와 함께 사용하기
tsximport * as trpc from '@trpc/server';import * as t from 'superstruct';// [...]export const appRouter = trpc.router<Context>().query('hello', {output: (value: any) => {if (value && typeof value.greeting === 'string') {return { greeting: value.greeting };}throw new Error('Greeting not found');},// expects return type of { greeting: string }resolve() {return { greeting: 'hello!' };},});export type AppRouter = typeof appRouter;
tsximport * as trpc from '@trpc/server';import * as t from 'superstruct';// [...]export const appRouter = trpc.router<Context>().query('hello', {output: (value: any) => {if (value && typeof value.greeting === 'string') {return { greeting: value.greeting };}throw new Error('Greeting not found');},// expects return type of { greeting: string }resolve() {return { greeting: 'hello!' };},});export type AppRouter = typeof appRouter;