GraphQL-Fragment-Matcher generieren — Numio
Erstellt mit @graphql-codegen/fragment-matcher die possibleTypes-Map aus einem GraphQL-Schema. Jedes Interface und jede Union wird mit den Objekttypen aufgeführt, die es implementieren bzw. zu ihr gehören, bereit für den InMemoryCache von Apollo Client.
InMemoryCache({ possibleTypes }) so konfigurieren, dass Fragments auf Interfaces oder Unions in Apollo Client 3 korrekt matchen.
Wann sie hilft
- InMemoryCache({ possibleTypes }) so konfigurieren, dass Fragments auf Interfaces oder Unions in Apollo Client 3 korrekt matchen.
- Die possibleTypes-Map nach dem Hinzufügen eines neuen Typs zu einer Union neu erzeugen, ohne die Codegen-CLI auszuführen.
Anwendung
- Füge ein Schema mit interface- oder union-Definitionen in den Editor GraphQL Schema ein.
- Prüfe das erzeugte possibleTypes-Objekt; Typen, die zu keinem Interface und keiner Union gehören, erscheinen nicht.
- Speichere es als .ts-Datei und übergib possibleTypes aus dem Default-Export an InMemoryCache.
GraphQL-Schema
interface Node {
id: ID!
}
type User implements Node {
id: ID!
name: String!
}
type Post implements Node {
id: ID!
title: String!
}
union SearchResult = User | Post
type Query {
search(term: String!): [SearchResult!]!
}possibleTypes (TypeScript)
export interface PossibleTypesResultData {
possibleTypes: {
[key: string]: string[]
}
}
const result: PossibleTypesResultData = {
possibleTypes: {
Node: ["User", "Post"],
SearchResult: ["User", "Post"],
},
}
export default resultDetails und Einschränkungen
Es wird nur das Schema verwendet; diese Seite hat keinen Editor Document.
Die Ausgabe ist TypeScript: ein Interface PossibleTypesResultData, eine typisierte Konstante result und ein Default-Export.
Ein Schema ohne Interfaces oder Unions ergibt ein leeres possibleTypes-Objekt. Die Erzeugung läuft in einem Web Worker im Browser.
FAQ
Ist das das alte IntrospectionFragmentMatcher-Format?
Nein. Die Ausgabe nutzt die possibleTypes-Struktur von Apollo Client 3 (Name des Supertyps auf ein Array von Subtypnamen abgebildet), nicht das Introspection-Ergebnisformat von Apollo Client 2.
Wie verwende ich die Ausgabe mit Apollo Client?
Importiere den Default-Export und übergib result.possibleTypes an new InMemoryCache({ possibleTypes }).