0Pricing
TypeScript Academy · Lektion

Typisierte Resolver mit GraphQL Code Generator

Schreiben Sie Resolver mit korrekten Eingabe- und Rückgabetypen.

Typisierte Resolver mit GraphQL Code Generator ist eine kostenlose TypeScript Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des TypeScript Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.

Das Problem der Resolver-Typisierung

GraphQL-Resolver sind gewöhnliche Funktionen. Ohne typisierte Signaturen ist es jedoch leicht, die falsche Struktur zurückzugeben. Codegen erzeugt Resolver-Typen, die korrekte Rückgabewerte erzwingen.

// Without typed resolvers — any type allowed
const userResolver = async (_, { id }) => fetchUser(id);

Das Resolvers-Plugin hinzufügen

Installieren und konfigurieren Sie @graphql-codegen/typescript-resolvers, um Typen für Resolver-Maps zu erzeugen.

npm install --save-dev @graphql-codegen/typescript-resolvers

codegen.yml für Resolver

Fügen Sie die Ausgabe des Resolvers-Plugins neben den grundlegenden TypeScript-Typen hinzu.

# codegen.yml
generates:
  src/generated/types.ts:
    plugins:
      - typescript
  src/generated/resolvers.ts:
    plugins:
      - typescript-resolvers

Die erzeugte ResolverMap verwenden

Wenden Sie den erzeugten Typ Resolvers auf Ihr Resolver-Map-Objekt an, um vollständige Typsicherheit zu erhalten.

import { Resolvers } from "./generated/resolvers";

const resolvers: Resolvers = {
  Query: {
    user: async (_, { id }) => fetchUser(id),
    // Return type enforced: must match User schema
  },
};

Typisierung des Kontexts

Übergeben Sie Ihren Kontexttyp an das Generic Resolvers, damit Resolver-Funktionen ein typisiertes Kontextobjekt erhalten.

interface Context { db: Database; user?: AuthUser; }

// codegen.yml
config:
  contextType: "src/context#Context"

// Generated: Resolvers<Context>
const resolvers: Resolvers<Context> = {
  Query: {
    me: (_, __, ctx) => ctx.user, // ctx: Context
  },
};

Mapper-Typen

Mit Mapper-Typen können Sie GraphQL-Typen Ihren internen Modelltypen zuordnen. Dadurch können Resolver Ihre Domänenobjekte statt der GraphQL-Ausgabetypen zurückgeben.

# codegen.yml
config:
  mappers:
    User: "src/models#UserModel"

Typisierung von Feld-Resolvern

Auch einzelne Feld-Resolver von Typen sind typisiert, einschließlich der Argumente für Parent und Kontext.

// Typed field resolver on User type
const resolvers: Resolvers<Context> = {
  User: {
    fullName: (parent) => `${parent.firstName} ${parent.lastName}`,
    // parent is UserModel (from mapper)
  },
};

Typisierte Mutationen

Mutations-Resolver erhalten typisierte Eingabeargumente, die aus den Input-Typen des Schemas abgeleitet werden.

// Schema: createUser(input: CreateUserInput!): User!
const resolvers: Resolvers = {
  Mutation: {
    createUser: (_, { input }) => {
      // input: CreateUserInput — fully typed
      return createUser(input.name, input.email);
    },
  },
};

Typisierte Subscriptions

Subscription-Resolver verfügen über eine subscribe-Funktion und eine resolve-Funktion, die beide von Codegen typisiert werden.

const resolvers: Resolvers = {
  Subscription: {
    messageAdded: {
      subscribe: () => pubsub.asyncIterator("MESSAGE_ADDED"),
      resolve: (payload) => payload.messageAdded, // typed
    },
  },
};

Codegen synchron halten

Fügen Sie einen Pre-Build- oder Pre-Commit-Hook hinzu, der die Resolver-Typen bei Änderungen am Schema neu erzeugt. So verhindern Sie, dass veraltete Typen in die Produktion gelangen.

// package.json
{
  "scripts": {
    "predev": "graphql-codegen",
    "prebuild": "graphql-codegen"
  }
}

Rückblick: Typisierte Resolver

Das Codegen-Plugin typescript-resolvers erzeugt einen Typ Resolvers, der korrekte Rückgabestrukturen, Argumenttypen und die Kontextstruktur für alle Ihre GraphQL-Resolver erzwingt.

Kurzer Test

Was bewirkt die Konfigurationsoption contextType in Codegen?

Das haben Sie gelernt

Typisierte GraphQL-Resolver mit Codegen erzwingen korrekte Rückgabetypen, Argumentstrukturen und Kontextobjekte in Ihrer gesamten Resolver-Map. Verwenden Sie Mapper-Typen für Domänenobjekte und halten Sie Codegen in Ihrer Build-Pipeline, um ein Auseinanderdriften zu verhindern.

Häufig gestellte Fragen

Ist die Lektion „Typisierte Resolver mit GraphQL Code Generator“ kostenlos?

Ja — der vollständige Text von „Typisierte Resolver mit GraphQL Code Generator“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des TypeScript Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Typisierte Resolver mit GraphQL Code Generator“?

Schreiben Sie Resolver mit korrekten Eingabe- und Rückgabetypen. Du übst TypeScript Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um TypeScript Academy zu starten?

Keine Vorkenntnisse erforderlich. TypeScript Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Typisierte Resolver mit GraphQL Code Generator“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser TypeScript Academy-Lektion Code schreiben und ausführen?

Ja. Jede TypeScript Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. GraphQL-Schema zu TypeScript-Typen
  2. Typisierte Resolver mit GraphQL Code Generator
  3. Typisierter GraphQL-Client mit Apollo und urql
  4. Typsicherheit von Ende zu Ende: Schema-First-Workflow
← Zurück zu TypeScript Academy