Strategie voor een pakket met gedeelde typen
Maak een speciaal types-pakket dat overal in de monorepo wordt gebruikt.
Strategie voor een pakket met gedeelde typen is een gratis TypeScript Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject TypeScript Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus TypeScript Academy bevat in totaal 4 lessen.
Waarom een gedeeld typenpakket?
Door typen tussen frontend en backend te delen, voorkom je dat API-contracten uit elkaar lopen. Eén bron van waarheid betekent compilatiefouten wanneer de vorm van de API verandert.
// packages/types/src/index.ts
export interface User { id: string; name: string; email: string; }
export interface ApiResponse<T> { data: T; error?: string; }Pakketstructuur
Houd het typenpakket minimaal: alleen type-exporten, zonder logica tijdens de uitvoering. Hierdoor heeft het geen bijwerkingen en kan het met tree-shaking worden verkleind.
packages/types/
├── src/
│ ├── index.ts # re-exports all
│ ├── user.ts
│ ├── product.ts
│ └── api.ts
├── tsconfig.json
└── package.jsontsconfig voor een typenpakket
Schakel emitDeclarationOnly in, zodat er geen JavaScript wordt uitgegeven — alleen .d.ts-bestanden waarnaar gebruikers kunnen verwijzen.
{
"compilerOptions": {
"composite": true,
"declaration": true,
"emitDeclarationOnly": true,
"outDir": "./dist",
"rootDir": "./src"
}
}Het typenpakket gebruiken
Verwijs naar het typenpakket in zowel de API als de webapp en importeer typen met import type om extra werk tijdens de uitvoering te voorkomen.
import type { User, ApiResponse } from "@myapp/types";
async function getUser(id: string): Promise<ApiResponse<User>> {
// ...
}Typen veilig serialiseren
Typen die tussen client en server worden gedeeld, mogen alleen JSON-serialiseerbare waarden bevatten. Vermijd Date-objecten — gebruik in plaats daarvan string (ISO).
// Good: serialization-safe
interface Event { id: string; createdAt: string; /* ISO date */ }
// Bad: Date is not JSON-serializable
interface Event { id: string; createdAt: Date; }Het typenpakket van versienummers voorzien
Gebruik semantische versienummering voor je typenpakket. Een niet-compatibele wijziging, zoals het verwijderen of hernoemen van een veld, vereist een verhoging van het hoofdversienummer.
# Breaking change: major bump
npm version major
# Adding optional fields: minor bump
npm version minorTypen genereren vanuit OpenAPI
Automatiseer het typenpakket door het vanuit een OpenAPI-specificatie te genereren met openapi-typescript. Zo komen de typen altijd overeen met de backend.
npx openapi-typescript ./api/openapi.yaml -o ./packages/types/src/api.tsZod gebruiken voor typen tijdens uitvoering en compilatie
Definieer typen met Zod-schema's en leid daar TypeScript-typen van af. Zowel de validatie tijdens de uitvoering als de statische typen komen uit dezelfde bron.
import { z } from "zod";
export const UserSchema = z.object({ id: z.string(), name: z.string() });
export type User = z.infer<typeof UserSchema>;Circulaire afhankelijkheden voorkomen
Het typenpakket mag niet importeren uit andere werkruimtepakketten, zodat circulaire afhankelijkheidsketens worden voorkomen. Houd het als bladknooppunt in de afhankelijkheidsgraaf.
// types/ should not import from ui/ or api/
// ui/ and api/ both import from types/Typecorrectheid testen
Gebruik tsd om beweringen op typeniveau te schrijven die controleren of de gedeelde typen overeenkomen met de verwachtingen.
import { expectType } from "tsd";
import type { User } from "@myapp/types";
expectType<User>({ id: "1", name: "Alice", email: "a@b.com" });Samenvatting: strategie voor gedeelde typen
Een gedeeld typenpakket voorkomt dat API's uit elkaar lopen: geef alleen declaraties uit, houd typen JSON-serialiseerbaar, gebruik semantische versienummering, genereer ze eventueel automatisch vanuit OpenAPI en test ze met tsd.
Korte controle
Waarom moeten gedeelde API-typen string gebruiken in plaats van Date?
Wat je hebt geleerd
Een gedeeld typenpakket is één bron van waarheid voor API-contracten. Houd het beperkt tot declaraties, zorg dat het JSON-veilig is, voorzie het van versienummers volgens semantische versienummering en genereer het eventueel vanuit OpenAPI om verschillen tussen frontend en backend te voorkomen.
Leer TypeScript met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 101
- Lessen
- 352
Veelgestelde vragen
Is de les “Strategie voor een pakket met gedeelde typen” gratis?
Ja — de volledige tekst van “Strategie voor een pakket met gedeelde typen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus TypeScript Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus TypeScript Academy bevat in totaal 4 lessen.
Wat leer ik in “Strategie voor een pakket met gedeelde typen”?
Maak een speciaal types-pakket dat overal in de monorepo wordt gebruikt. Je oefent met TypeScript Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met TypeScript Academy te beginnen?
Ervaring vooraf is niet nodig. TypeScript Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Strategie voor een pakket met gedeelde typen”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over TypeScript Academy?
Ja. Elke les over TypeScript Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- TypeScript-projectreferenties uitgelegd
- pnpm-workspaces met TypeScript
- Strategie voor een pakket met gedeelde typen
- Incrementele builds en cache in monorepo's