2017-08-18 3 views
0

Lassen Sie sich sagen, ich zum Beispiel eines typischen Forum Nachrichtentyp mit GraphQL JavaScript-Schnittstelle definieren will:Wie rekursiv GraphQL Typ programmgesteuert definieren?

import { 
    GraphQLString, 
    GraphQLObjectType, 
} from 'graphql'; 

const MessageType = new GraphQLObjectType({ 
    name: 'Message', 
    fields: { 
    text: { type: GraphQLString }, 
    comments: new GraphQLList(MessageType), 
    }, 
}); 

Die JavaScript-Compiler (na ja, Dolmetscher) würden darüber beschweren. Es würde sagen, dass MessageType is undefined.

Wir alle wissen, dass es möglich ist, eine solche Art mit der GraphQL Sprache zu definieren:

type Message { 
    text: String 
    comments: [Message] 
} 

Wie könnte man eine solche Art mit GraphQL reine JavaScript-Schnittstelle definieren?

Antwort

1

Nun, die Antwort ist einfach.

Sie müssen nur ein Thunk übergeben (Funktion ohne Argumente) als das field Feld, anstatt reines JavaScript-Objekt zu übergeben.

Die Funktion würde nur ausgeführt, wenn der Typ bereits definiert wäre, also wird es funktionieren.

resultierende Code sieht wie folgt aus:

import { 
    GraphQLString, 
    GraphQLObjectType, 
} from 'graphql'; 

const MessageType = new GraphQLObjectType({ 
    name: 'Message', 
    fields:() => ({ // <-- Notice the function definition 
    text: { type: GraphQLString }, 
    comments: new GraphQLList(MessageType), 
    }), 
});