1

次の typedef があるとします。

interface Node {
  id: ID!
}

type Foo implements Node {
  id: ID!
  quantity: Int
}

type Bar implements Node {
  id: ID!
  name: String
}

送信するすべての ID を同じ方法で処理したいと考えています。現在、次のようなリゾルバーが必要です。

{
  // ...
  Foo: {
    id: (root) => encodeId(root.id, root.type),
    // ...
  },
  Bar: {
    id: (root) => encodeId(root.id, root.type),
    // ...
  },
  // ...
}

多くのタイプが を実装Nodeしているため、コードの重複が多くなり、開発者が ID をエンコードする正しい方法を忘れたり、それらをまとめてエンコードするのを忘れたりするのは非常に簡単です。

このようなことをする方法はありますか?

{
  // ...
  Node: {
    __resolveType: (root) => root.type,
    id: (root) => encodeId(root.id, root.type)
  },
  // ...
}

そのようなFooBarおよびの他の実装はリゾルバNodeを継承しますか?id

4

2 に答える 2

5

この質問にまだつまずいている人は、inheritResolversFromInterfacesフラグを にmakeExecutableSchema設定できますtrue

ここで見つけました:https://github.com/apollographql/graphql-tools/issues/762#issuecomment-385591309

Apollo ドキュメントはこちら: https://www.apollographql.com/docs/apollo-server/api/apollo-server/#makeexecutableschema

于 2019-07-26T10:24:35.500 に答える