4

次の規則を使用して、リゾルバーが部分的なデータを返せるようにし、他のリゾルバーが不足しているフィールドを補完できるようにします。

type UserExtra {
  name: String!
}

type User {
  id: ID!
  email: String!
  extra: UserExtra!
}

type Query {
  user(id: ID!): User!
  users: [User!]!
}
const getUser = (id: string): { id: string, email: string, extra: { name: string } => fetchUser(id);

// `fetchUsers` only returns `id` and `email`, but not `extra`
const getUsers = (): { id: string, email: string }[] => fetchUsers();

// we can use this function to fetch the extra field for a given user
const getUserExtra = (id: string): { name: string }  => fetchUserExtra();

export default {
  Query: {
    user: (parent, args) => getUser(args.id),
    users: () => getUsers(),
  },
  User: {
    // here we fetch the `extra` field anytime an `User` is requested
    // in real-life I would check if the query is requesting the `extra`
    // field or not, and only fetch the data if requested by the query
    extra: (parent) => {
      return getUserExtra(parent.id)
    },
  }
}

私が抱えている問題は、GraphQL コード ジェネレーターが完全な形状を返すResolverことを期待する型を生成することです。もちろん、 から部分的な形状を返しても、クライアントのおかげで最終的に を受け取るという事実を認識していません。それでも予想通りの形。Query#usersUserQuery#usersUser#extra

TS を満足させながら、このケースを処理する最善の方法は何ですか?

4

1 に答える 1