typescript - Del prisma-typer og enum på tvers av flere prosjekter


For øyeblikket utvikler jeg en API som gir data ved hjelp av Prisma. Denne API-en brukes av flere prosjekter. I API-en genererer jeg typer ved å bruke Prisma.ModelGetPayload for å definere returtypene for enkelte API-responser.

import { Prisma } from "@prisma/client";

export const minimalSelect = Prisma.validator<Prisma.ModelXYSelect>()({
    id: true,
    name: true
});

export type MinimalModelXY = Prisma.ModelXYGetPayload<{
    select: typeof minimalSelect;
}>;

Eller enums kan enkelt importeres fra Prisma-klienten.

import { EnumXY } from "@prisma/client";

Disse enumene og typedefinisjonene er avhengige av den genererte Prisma-klienten til API-en.

Det finnes løsninger hvor hele Prisma-klienten blir hentet ut i en npm-pakke (se her), men dette er ikke hva jeg ønsker å gjøre.

Er det mulig å trekke ut disse typene til en npm-pakke for å dele dem mellom flere prosjekter uten å trekke ut hele Prisma-klienten?

Svar #1

Hvis du vil eksportere alle typene som genereres av Prisma, kan du finne alle på node_modules/.prisma/client/index.d.ts

Du kan bare eksportere denne filen i en npm-pakke og bruke den i frontend-applikasjonen.

En annen tilnærming du kan bruke er å publisere din schema.prisma til en npm-pakke. Deretter kan du i ditt andre prosjekt generere et Prisma-klientbibliotek fra schema.prisma-filen, på denne måten vil du ikke trenge å eksportere PrismaClient.

Svar #2

For alle som har denne bruken i fremtiden, hadde jeg det samme problemet, så jeg laget en generator for å eksportere typene til Prisma-klienten din til en spesifisert katalog og fjerne de kompilerte JS-filene.

  1. npm install -D prisma-types-export
  2. Legg til følgende i filen din schema.prisma:

    generator types {
        provider = "prisma-types-export"
        output   = "./prisma-types"
    }
    
  3. npx prisma generate

Relaterte artikler