我有一个如下定义的自定义上下文,我要将其传递给Mercurius。
export interface Context {
prisma: PrismaClient
}
const prisma = new PrismaClient()
export const context: Context = {
prisma: prisma,
}
我的墨丘利定义如下。
app.register(mercurius, {
schema,
resolvers,
graphiql: true,
context: () => context /* This is the context object from above */,
})
我在定义接受上下文对象的resolvers
时遇到困难。
根据Mercurius文档,resolver函数的第二个参数是在Graphql中传递给它的参数,第三个参数是上下文对象。但是,如果我定义了一个如下的resolver,我会从Typescript中得到错误。
const resolvers = {
Query: {
findFirst: async (_:any, args:any, ctx:Context) => {
//...
}
}
};
看起来Mercurius定义了上下文参数为MercurialContext
类型的预期签名。在我的例子中,我的上下文不需要MercuriusContext
中的额外信息,所以我不扩展它。所以,我被迫声明我的解析器如下。
const resolvers = {
Query: {
findFirst: async (_:any, args:any, ctx:any) => {
//...Then in my code I am using 'ctx as Context' to force it into my object
}
}
};
在Typescript中有什么优雅的方法来处理这个问题吗?
1条答案
按热度按时间kgsdhlau1#