次の規則を使用して、リゾルバーが部分的なデータを返せるようにし、他のリゾルバーが不足しているフィールドを補完できるようにします。
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#users
User
Query#users
User#extra
TS を満足させながら、このケースを処理する最善の方法は何ですか?