React Academy · Lektion

Problemet, som tRPC løser

Forstå typeforskydningen mellem frontendens og backendens API-kontrakter, og hvordan tRPC eliminerer den uden codegen.

Lektion 1 af 413 trin

Problemet, som tRPC løser er en gratis React Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i React Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. React Academy-kurset indeholder 4 lektioner i alt.

Problemet med typeafvigelser

Når du bygger en REST API i TypeScript, definerer serveren svarstrukturen. Klienten skal manuelt oprette tilsvarende TypeScript-typer. Disse typer kommer ud af trit over tid, efterhånden som API'et udvikler sig, og compileren kan ikke opdage uoverensstemmelsen, fordi typerne er defineret i separate pakker.

Et felt, der omdøbes på serveren, bliver til en skjult runtime-fejl på klienten.

GraphQL Codegen som én løsning

GraphQL løser typeafvigelser ved at generere TypeScript-typer fra skemaet ved hjælp af værktøjer som graphql-codegen. Det fungerer godt, men tilføjer kompleksitet: et separat forespørgselssprog (GraphQL SDL), et trin til kodegenerering i byggeforløbet og værktøjer til skemahåndtering.

For teams, der allerede har investeret i GraphQL, er kodegenerering det rigtige svar. For teams, der ønsker typesikkerhed uden GraphQL-omkostningerne, tilbyder tRPC et alternativ.

tRPC: Typer via TypeScript-importer

tRPC's tilgang er radikalt enkel: Definér dine API-procedurer på serveren som TypeScript-funktioner, eksportér routertypen, og importér den type på klienten. Ingen kodegenerering. Intet separat skemasprog.

TypeScript-compileren håndhæver selv kontrakten mellem klient og server på byggetidspunktet.

Kravet om et monorepo

tRPC kræver, at serveren og klienten deler typer via TypeScript-importer. Det fungerer naturligt i et monorepo (Turborepo, Nx, pnpm workspaces), hvor serveren og klienten er separate pakker, der kan importere fra hinanden.

Hvis backend og frontend er fuldstændigt adskilt, skal du udgive routertyperne som en delt pakke. Det tilføjer et udgivelsestrin, men kræver stadig ingen kodegenerering.

Sådan flyder tRPC-typer

På serveren definerer du en router og eksporterer dens type: export type AppRouter = typeof appRouter. På klienten importerer du den type og opretter en typesikker klient: createTRPCReact(). Klienten ved præcis, hvilke procedurer der findes, og hvilke typer deres inddata og uddata har.

Hvis du omdøber en procedure på serveren, vises der straks en TypeScript-fejl på klienten.

Autofuldførelse og refaktorering

Fordi tRPC bruger TypeScript's typesystem direkte, giver din editor fuld autofuldførelse af procedurenavne, inddatastrukturer og returtyper på klientsiden. Omdøbning af en procedure er en TypeScript-rename-refaktorering, ikke en manuel søgning og erstatning på tværs af kodebasen.

Denne forbedring af udvikleroplevelsen er i praksis tRPC's mest roste funktion.

tRPC-transportmekanismer

Som standard bruger tRPC HTTP som transportmekanisme. Hvert procedurekald er en HTTP-anmodning. tRPC understøtter også WebSockets til abonnementer. Transportmekanismen er en implementeringsdetalje; klientens API er identisk uanset transportmekanismen.

Du kan også eksponere tRPC-procedurer som almindelige REST-endepunkter ved hjælp af REST-adapteren, så de er kompatible med klienter, der ikke bruger tRPC.

tRPC-økosystemet

tRPC fungerer som middleware i Express, Fastify og Hono. I Next.js integreres det via håndteringsfunktioner til API-ruter. Startskabelonen create-t3-app (T3 Stack) samler tRPC, Prisma, NextAuth og Tailwind i en fuldstack-Next.js-skabelon.

T3 Stack er det mest populære udgangspunkt for tRPC og viser produktionsklare mønstre.

tRPC kontra OpenAPI + Zod

En anden typesikker REST-tilgang er at definere Zod-skemaer, generere en OpenAPI-specifikation automatisk og generere TypeScript-typer fra specifikationen. Det giver en API-kontrakt, som klienter, der ikke er skrevet i TypeScript, kan bruge.

tRPC er enklere, men kun til TypeScript. OpenAPI+Zod tilføjer kompleksitet, men producerer en offentlig API-kontrakt. Vælg tRPC til intern kommunikation fra TypeScript til TypeScript; vælg OpenAPI til offentlige API'er.

Hvad tRPC ikke gør

tRPC er ikke en erstatning for REST, når du har brug for en offentlig API, der bruges af tredjeparter, mobilklienter, som ikke er skrevet i TypeScript, eller partnere, der har brug for en stabil, versionsstyret kontrakt. Det er specifikt beregnet til TypeScript-monorepoer med typesikkerhed i hele stakken.

Hvis du forstår dette anvendelsesområde, undgår du at tage tRPC i brug i sammenhænge, hvor REST eller GraphQL passer bedre.

Startprojekt til create-t3-app

Hvis du kører npm create t3-app@latest, opretter det grundstrukturen til et Next.js-projekt med tRPC, Prisma, NextAuth.js, Tailwind CSS og TypeScript forudkonfigureret. Den genererede kode viser routerstrukturen, oprettelsen af konteksten og opsætningen af klienten.

Ved at studere denne grundstruktur får du den hurtigste vej til at forstå, hvordan alle tRPC-delene passer sammen i en rigtig applikation.

tRPC's mekanisme til deling af typer

Hvordan deler tRPC typer mellem serveren og klienten uden kodegenerering?

Opsummering af lektionen

tRPC løser uoverensstemmelser mellem typer på TypeScript-klienten og -serveren ved at dele routerens TypeScript-type direkte via import, så kodegenerering bliver overflødig. Det fungerer i monorepoer og integreres med Next.js, Express, Fastify og Hono. T3 Stack (create-t3-app) er det almindelige startprojekt til produktion.

tRPC fungerer kun med TypeScript og er bedst egnet til interne full-stack-applikationer, ikke til offentlige API'er.

Gratis at komme i gang

Lær React med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
88
Lektioner
324

Ofte stillede spørgsmål

Er lektionen “Problemet, som tRPC løser” gratis?

Ja — hele teksten til “Problemet, som tRPC løser” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af React Academy-kurset, skal du opgradere til CoddyKit PRO. React Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Problemet, som tRPC løser”?

Forstå typeforskydningen mellem frontendens og backendens API-kontrakter, og hvordan tRPC eliminerer den uden codegen. Du øver dig i React Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på React Academy?

Der kræves ingen tidligere erfaring. React Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Problemet, som tRPC løser”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne React Academy-lektion?

Ja. Alle React Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Problemet, som tRPC løser
  2. Opsætning af tRPC med React og Next.js
  3. Queries, mutationer og subscriptions
  4. Integration af tRPC med React Query og Auth
← Tilbage til React Academy