tRPC para TypeScript: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é tRPC e para que serve?

\n\n

tRPC (TypeScript Remote Procedure Call) é uma biblioteca moderna para criar APIs type-safe entre cliente e servidor. A principal característica do tRPC é que ele não requer geração de código ou duplicação de tipos. Você simplesmente escreve funções no servidor, e o cliente obtém acesso a elas com suporte completo do TypeScript — autocompletar, verificação de tipos e IntelliSense.

\n\n

Ao contrário de REST ou GraphQL, onde você precisa descrever manualmente esquemas, endpoints e tipos, o tRPC infere automaticamente os tipos a partir do seu código do servidor. Isso simplifica radicalmente o desenvolvimento e reduz o número de erros.

\n\n

Principais vantagens do tRPC:

\n
    \n
  • Type-safety completa — erros de tipo são detectados em tempo de compilação, não em tempo de execução
  • \n
  • Sem geração de código — não é necessário executar geradores ou sincronizar esquemas
  • \n
  • Boilerplate mínimo — menos código do que em REST ou GraphQL
  • \n
  • Documentação automática — os tipos servem como documentação
  • \n
  • Simplicidade — funciona como uma chamada de função comum
  • \n
\n\n

tRPC é ideal para aplicações full-stack em TypeScript (Next.js, Remix, Express, Fastify) e para arquitetura de microsserviços.

\n\n

Instalação do tRPC

\n\n

tRPC consiste em vários pacotes. Para uso básico, você precisará de:

\n\n
# Instalação das partes servidor e cliente\nnpm install @trpc/server @trpc/client\n\n# Instalação do adaptador React (se você usa React)\nnpm install @trpc/react-query @tanstack/react-query\n\n# Instalação do adaptador para Next.js\nnpm install @trpc/next @trpc/react-query @tanstack/react-query\n\n# Instalação do Zod para validação (recomendado)\nnpm install zod
\n\n

Se você usa yarn ou pnpm:

\n\n
yarn add @trpc/server @trpc/client\npnpm add @trpc/server @trpc/client
\n\n

Para desenvolvedores Python (se você usa Python no backend): tRPC é uma biblioteca TypeScript, mas você pode usá-la com Python através do trpc-py (wrapper experimental). No entanto, o ecossistema principal é TypeScript.

\n\n

Início rápido com exemplo de código

\n\n

Vamos criar uma aplicação simples: um servidor com procedimentos para trabalhar com usuários e um cliente que os chama.

\n\n

1. Servidor (server.ts)

\n\n
import { initTRPC } from '@trpc/server';\nimport { z } from 'zod';\n\n// Criando uma instância do tRPC\nconst t = initTRPC.create();\n\n// Definindo o tipo de usuário\ninterface User {\n  id: number;\n  name: string;\n  email: string;\n}\n\n// Banco de dados fictício\nconst users: User[] = [\n  { id: 1, name: 'Alice', email: 'alice@example.com' },\n  { id: 2, name: 'Bob', email: 'bob@example.com' },\n];\n\n// Criando um roteador com procedimentos\nconst appRouter = t.router({\n  // Procedimento para obter todos os usuários\n  getUsers: t.procedure\n    .query(() => {\n      return users;\n    }),\n\n  // Procedimento para obter um usuário por ID\n  getUserById: t.procedure\n    .input(z.number())\n    .query(({ input }) => {\n      return users.find(user => user.id === input) || null;\n    }),\n\n  // Procedimento para criar um usuário\n  createUser: t.procedure\n    .input(z.object({\n      name: z.string().min(1),\n      email: z.string().email(),\n    }))\n    .mutation(({ input }) => {\n      const newUser: User = {\n        id: users.length + 1,\n        name: input.name,\n        email: input.email,\n      };\n      users.push(newUser);\n      return newUser;\n    }),\n});\n\n// Exportando o tipo do roteador para o cliente\nexport type AppRouter = typeof appRouter;
\n\n

2. Cliente (client.ts)

\n\n
import { createTRPCClient, httpBatchLink } from '@trpc/client';\nimport type { AppRouter } from './server';\n\n// Criando o cliente\nconst client                    

Recommendations