2017-08-18 23 views
0

は、たとえば、私はGraphQL JavaScriptのインタフェースを使用して、一般的なフォーラムのメッセージタイプを定義したい、のは、言ってみましょう:プログラムで再帰的なGraphQL型を定義する方法は?

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

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

のJavaScriptコンパイラ(だけでなく、インタプリタ)は、この文句を言うでしょう。それはMessageType is undefinedと言うでしょう。

私たちは皆、GraphQL言語を使用して、このような型を定義することが可能である知っている:

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

はどのようにしてGraphQL純粋なJavaScriptのインタフェースを使用して、このようなタイプを定義することができますか?

答えて

1

まあ、答えは簡単です。

普通のJavaScriptオブジェクトを渡す代わりに、サンク(引数なしの関数)をfieldフィールドとして渡すだけで済みます。

関数は、型が既に定義されている場合にのみ実行されるため、機能します。

結果のコードは次のようになります。

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

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