React Academy · Lektion

Problemet som tRPC löser

Förstå typförskjutningen mellan frontendens och backendens API-kontrakt och hur tRPC eliminerar den utan kodgenerering.

Lektion 1 av 413 steg

Problemet som tRPC löser är en gratis lektion i React Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för React Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i React Academy innehåller totalt 4 lektioner.

Problemet med typdrift

När du bygger ett REST-API i TypeScript definierar servern svarens struktur. Klienten måste manuellt skapa matchande TypeScript-typer. Med tiden kan dessa typer hamna ur synk när API:et utvecklas, och kompilatorn kan inte upptäcka avvikelsen eftersom typerna är definierade i separata paket.

Ett fält som får ett nytt namn på servern blir ett tyst runtime-fel på klienten.

GraphQL Codegen som en lösning

GraphQL löser typdrift genom att generera TypeScript-typer från schemat med verktyg som graphql-codegen. Detta fungerar bra men ökar komplexiteten: ett separat frågespråk (GraphQL SDL), ett kodgenereringssteg i byggprocessen och verktyg för schemahantering.

För team som redan satsar på GraphQL är codegen rätt svar. För team som vill ha typsäkerhet utan den extra komplexiteten från GraphQL erbjuder tRPC ett alternativ.

tRPC: typer via TypeScript-importer

tRPC:s tillvägagångssätt är radikalt enkelt: definiera API-procedurerna på servern som TypeScript-funktioner, exportera routertypen och importera typen på klienten. Ingen kodgenerering. Inget separat schemaspråk.

Själva TypeScript-kompilatorn upprätthåller kontraktet mellan klient och server under byggprocessen.

Kravet på monorepo

tRPC kräver att servern och klienten delar typer via TypeScript-importer. Detta fungerar naturligt i ett monorepo (Turborepo, Nx, pnpm workspaces), där servern och klienten är separata paket som kan importera från varandra.

För en helt separat backend och frontend behöver du publicera routertyperna som ett delat paket. Det lägger till ett publiceringssteg men kräver fortfarande ingen kodgenerering.

Så flödar tRPC-typerna

På servern definierar du en router och exporterar dess typ: export type AppRouter = typeof appRouter. På klienten importerar du typen och skapar en typad klient: createTRPCReact(). Klienten vet exakt vilka procedurer som finns och vilka typer deras indata och utdata har.

Om du byter namn på en procedur på servern visas omedelbart ett TypeScript-fel på klienten.

Autokomplettering och refaktorering

Eftersom tRPC använder TypeScripts typsystem direkt erbjuder editorn fullständig autokomplettering av procedurnamn, indataformat och returtyper på klientsidan. Att byta namn på en procedur är en TypeScript-refaktorering för namnbyte, inte en manuell sökning och ersättning i hela kodbasen.

Denna förbättring av utvecklarupplevelsen är i praktiken tRPC:s mest uppskattade funktion.

tRPC-transport

Som standard använder tRPC HTTP som transportprotokoll. Varje proceduranrop är en HTTP-förfrågan. tRPC stöder också WebSockets för prenumerationer. Transporten är en implementationsdetalj; klientens API är identiskt oavsett transport.

Du kan också exponera tRPC-procedurer som konventionella REST-slutpunkter med REST-adaptern, för kompatibilitet med klienter som inte använder tRPC.

tRPC-ekosystemet

tRPC fungerar som middleware i Express, Fastify och Hono. För Next.js integreras det via API-rout handlers. Startpaketet create-t3-app (T3 Stack) samlar tRPC, Prisma, NextAuth och Tailwind i en fullständig Next.js-mall för hela stacken.

T3 Stack är den populäraste startpunkten för tRPC och visar mönster som är klara för produktion.

tRPC jämfört med OpenAPI + Zod

En annan typsäker REST-metod är att definiera Zod-scheman, automatiskt generera en OpenAPI-specifikation och generera TypeScript-typer från specifikationen. Detta ger ett API-kontrakt som klienter som inte är skrivna i TypeScript kan använda.

tRPC är enklare men fungerar endast med TypeScript. OpenAPI+Zod innebär större komplexitet men skapar ett offentligt API-kontrakt. Välj tRPC för intern kommunikation mellan TypeScript-system och OpenAPI för offentliga API:er.

Vad tRPC inte gör

tRPC ersätter inte REST när du behöver ett offentligt API som används av tredjeparter, mobilklienter som inte är skrivna i TypeScript eller partner som behöver ett stabilt versionshanterat kontrakt. Det är specifikt avsett för TypeScript-monorepon med typsäkerhet i hela stacken.

Genom att förstå denna begränsning undviker du att införa tRPC i sammanhang där REST eller GraphQL passar bättre.

Startpaket för create-t3-app

Kommandot npm create t3-app@latest skapar grundstrukturen för ett Next.js-projekt med tRPC, Prisma, NextAuth.js, Tailwind CSS och TypeScript förkonfigurerade. Den genererade koden visar routerstrukturen, hur context skapas och hur klienten konfigureras.

Att studera denna grundstruktur är det snabbaste sättet att förstå hur alla tRPC-delar passar ihop i en riktig applikation.

tRPC:s typdelningsmekanism

Hur delar tRPC typer mellan servern och klienten utan kodgenerering?

Lektionssammanfattning

tRPC löser problemet med typdrift mellan TypeScript-klient och server genom att dela routerns TypeScript-typ direkt via import, vilket eliminerar kodgenerering. Det fungerar i monorepon och integreras med Next.js, Express, Fastify och Hono. T3 Stack (create-t3-app) är det standardiserade startpaketet för produktionsapplikationer.

tRPC är endast avsett för TypeScript och passar bäst för interna fullstackapplikationer, inte publika API:er.

Gratis att börja

Lär dig React med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
88
Lektioner
324

Vanliga frågor

Är lektionen ”Problemet som tRPC löser” gratis?

Ja – hela texten till ”Problemet som tRPC löser” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i React Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i React Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Problemet som tRPC löser”?

Förstå typförskjutningen mellan frontendens och backendens API-kontrakt och hur tRPC eliminerar den utan kodgenerering. Ni övar på React Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig React Academy?

Du behöver inga förkunskaper. Utbildningen i React Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Problemet som tRPC löser”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här React Academy-lektionen?

Ja. Varje React Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Problemet som tRPC löser
  2. Konfigurera tRPC med React och Next.js
  3. Queries, mutationer och prenumerationer
  4. Integrera tRPC med React Query och Auth
← Tillbaka till React Academy