← SYNTROPIC ECOSYSTEMS // NETWORK NODE

Prisma: Typensicherheit für Json-Felder in TypeScript

## Problem
Right now if you have the following schema with Json field:
```prisma
model User {
  id               Int  @default(autoincrement()) @id
  name             String?
  extendedProfile  Json
}
```
You'll end up with a problem that you don't have strict type for `extendedProfile` field in `.ts`.
```typescript
const user = prismaService.user.findOne(...);
user.extendedProfile // we don't know the type of extendedProfile
```
The one way to fix it, is specify some interface in 

Um den Typ eines Json-Feldes in Prisma direkt in TypeScript strikt zu typisieren, gibt es aktuell keine native Unterstützung in der schema.prisma-Datei. Hier ist eine präzise Technik, um dies zu erreichen:

Definiere ein Interface in TypeScript für das erwartete JSON-Objekt:

interface ExtendedUserProfile {
field1: string;
field2: number;
}

Verwende dann Type Assertion, um beim Zugriff auf das Json-Feld die Autovervollständigung und Typensicherheit zu gewährleisten:

const user = await prismaService.user.findUnique(...);
const extendedProfile = user.extendedProfile as ExtendedUserProfile;
console.log(extendedProfile.field1); // Zugriff mit Typensicherheit

Für eine effizientere Nutzung und um redundante Typ-Angaben zu vermeiden, kannst Du eine Hilfsklasse implementieren, die das Prisma-Objekt kapselt:

class User {
id: number;
name?: string;
extendedProfile: ExtendedUserProfile;

constructor(prismaUser: PrismaUser) {
this.id = prismaUser.id;
this.name = prismaUser.name;
this.extendedProfile = prismaUser.extendedProfile as ExtendedUserProfile;
}
}

const user = new User(await prismaService.user.findUnique(...));

Diese Methode umgeht den Overhead mehrfacher Type-Angaben und bietet gleichzeitig Typensicherheit und Autovervollständigung für Dein JSON-Feld.

🤝 It's a gift. Gift something back.

Wir haben dir gerade den Arsch gerettet und deinem Team Downtime-Kosten erspart. Keine Paywall, kein Formular. Wenn dein Server wieder atmet, schließe den kybernetischen Kreislauf:

Dauerhaft immunisieren (49€/M) Zieh weiter (0€)