I'm running into issues relating to the inference of arguments and return types from within a given GraphQLObjectType.
My query interface looks like this:
interface Query {
tweets: Tweet[];
user: User;
}
And my schema like this:
export const schema = new GraphQLSchema({
query: new GraphQLObjectType<Context, Query>({
fields: {
tweets: {
resolve: async (_0, args) => {
// `tweets` resolution here
},
type: new GraphQLList(TweetType),
},
user: {
args: {
id: {type: GraphQLID},
},
resolve: async (_0, args) => {
// `user` resolution here
},
type: UserType,
},
},
name: "Query",
}),
});
The tweets query is meant to accept no arguments, whereas the user query accepts the user's id. So I specify the 3rd generic argument, which I hoped would map to the correct fields:
export const schema = new GraphQLSchema({
- query: new GraphQLObjectType<Context, Query>({
+ query: new GraphQLObjectType<Context, Query, {tweets: undefined; user: {id: string}}>({
fields: {
...
Although I expect for those types to flow through to their respective resolver arguments, they do not. Instead, the entire map flows through:

While I could provide a union of the two types, this lacks specificity, and I was wondering if there's a better way?
Additionally, (perhaps this merits another issue), the resolver return types aren't inferred either (I have to manually append the return signature).
- resolve: async (test, args) => {
+ resolve: async (test, args): Promise<Tweet[]> => {
try {
const tweets = await firestore.collection("tweets").get();
return tweets.docs.map((tweet) => ({id: tweet.id, ...tweet.data()})) as Tweet[];
} catch (error) {
throw new ApolloError(error);
}
},
type: new GraphQLList(TweetType),
},
user: {
args: {
id: {type: GraphQLID},
},
- resolve: async (_0, args) => {
+ resolve: async (_0, args): Promise<User> => {
Any help or advice would be greatly appreciated! Thank you!
Kind regards,
Harry
I'm running into issues relating to the inference of arguments and return types from within a given
GraphQLObjectType.My query interface looks like this:
And my schema like this:
The
tweetsquery is meant to accept no arguments, whereas theuserquery accepts the user's id. So I specify the 3rd generic argument, which I hoped would map to the correct fields:export const schema = new GraphQLSchema({ - query: new GraphQLObjectType<Context, Query>({ + query: new GraphQLObjectType<Context, Query, {tweets: undefined; user: {id: string}}>({ fields: { ...Although I expect for those types to flow through to their respective resolver arguments, they do not. Instead, the entire map flows through:
While I could provide a union of the two types, this lacks specificity, and I was wondering if there's a better way?
Additionally, (perhaps this merits another issue), the resolver return types aren't inferred either (I have to manually append the return signature).
Any help or advice would be greatly appreciated! Thank you!
Kind regards,
Harry